Мне нужна метка времени как целое число (пожалуйста, НЕ спрашивайте меня, почему, меня это полностью беспокоит). Определение - это количество секунд после 01.01.1970, как обычно.Создайте целую временную метку в Firebird
То, что я как щёток значение является строкой с форматом
YYYYMMDDHHMMSS (например, 20140108154821)
Я был в состоянии построить нормальную временную метку
CAST(
(SUBSTRING (t.thetime FROM 5 FOR 2)||'/'||SUBSTRING (t.thetime FROM 7 FOR 2)||'/'||SUBSTRING (t.thetime FROM 1 FOR 4)||' ' ||SUBSTRING (t.thetime FROM 9 FOR 2)||':'||SUBSTRING (t.thetime FROM 11 FOR 2)||':'||SUBSTRING (t.thetime FROM 13 FOR 2)||'.00'
) AS TIMESTAMP)
Тогда я попытался для его литья в инт с использованием этой техники
CAST(cast(
(SUBSTRING (t.thetime FROM 5 FOR 2)||'/'||SUBSTRING (t.thetime FROM 7 FOR 2)||'/'||SUBSTRING (t.thetime FROM 1 FOR 4)||' '|| SUBSTRING (t.thetime FROM 9 FOR 2)||':'||SUBSTRING (t.thetime FROM 11 FOR 2)||':'||SUBSTRING (t.thetime FROM 13 FOR 2)||'.00'
) AS TIMESTAMP)
-cast('01/01/1970 00:00:00' as timestamp) as BIGINT) as TIMESTAMP_INT
Я делаю получить целое число, но похоже, что возвращаемое значение - это количество дней или что-то в этом роде.
например. 08.01.2015, 16: 33: 01.114 становится 16444
Любые предложения, почему это происходит или есть ли другой способ сделать это?
Я использую Firebird версии 2.5
Спасибо заранее
PS:
SELECT
CAST(cast(
(SUBSTRING ('20140108154821' FROM 5 FOR 2)||'/'||SUBSTRING ('20140108154821' FROM 7 FOR 2)||'/'||SUBSTRING ('20140108154821' FROM 1 FOR 4)||' '
||
SUBSTRING ('20140108154821' FROM 9 FOR 2)||':'||SUBSTRING ('20140108154821' FROM 11 FOR 2)||':'||SUBSTRING ('20140108154821' FROM 13 FOR 2)||'.00'
) AS TIMESTAMP)
-cast('01/01/1970 00:00:00' as timestamp) as BIGINT)
from sometable
;
Большое спасибо, после некоторого тестирования это подход, который работает для меня :) – confusedandtired