Как преобразовать TIMESTAMP в миллисекунды UTC в ESQL

Есть ли функция ESQL для преобразования TIMESTAMP в миллисекунды UTC?

Вот что я сделал:

DECLARE eventTimeInteger INTEGER CAST ((eventTimeStamp - epochTimeStamp) SECOND as INTEGER);  

Но я продолжаю получать эту ошибку. Поэтому я подозреваю, что "-" является проблемой, но я не уверен, как еще это сделать.

BIP2420E: (.Event_SeparateMessages.Main, 142.60): недопустимые или несовместимые типы данных для оператора «-».

Либо типы данных операндов оператора недопустимы для оператора, либо типы данных несовместимы.

Исправьте синтаксис выражения ESQL в узле '.Event_SeparateMessages.Main' вокруг строки и столбца '142.60', затем повторно разверните поток сообщений: Убедитесь, что типы данных операндов допустимы и совместимы друг с другом.

Это ниже то, что я пробовал, но он даже не будет развернут.

--Converting time in string to timestamp
DECLARE source CHARACTER eventTime ;
DECLARE eventTimeStamp CHARACTER;
DECLARE pattern CHARACTER 'yyyy-MM-dd''T''HH:mm:ss.SSS''Z';
SET eventTimeStamp = CAST(source AS TIMESTAMP FORMAT pattern);
DECLARE epochTimeStamp TIMESTAMP '1970-01-01 00:00:00';

--Casting time from timestamp to Integer                       
DECLARE eventTimeInteger INTEGER CAST ((eventTimeStamp - epochTimeStamp) SECOND as INTEGER);  

Мне нужно, чтобы "eventTimeInteger" дал мне метку времени в секундах.


person uniqk    schedule 28.08.2019    source источник
comment
Пожалуйста, не используйте тег esql. Укажите СУБД, с которой вы работаете, в одном теге, и если встроенный SQL подходит, используйте embedded-sql вместо esql. Я бы предположил, что datetime более подходит, чем интеграция — и я не уверен, что unix-timestamp действительно подходит. Я внес некоторые изменения в теги; пожалуйста, отредактируйте свой вопрос, чтобы добавить правильную СУБД.   -  person Jonathan Leffler    schedule 28.08.2019


Ответы (1)


Проблема, если я правильно понимаю ваш код, заключается в том, что вы пытаетесь вычесть TIMESTAMP из набора CHARACTER.

edit: заметил изменение SET для eventTimeStamp, однако математика даты по-прежнему будет выдавать INTERVAL выход, а не INTEGER

DECLARE EpocTimeStamp TIMESTAMP; 
DECLARE eventTimeStamp INTERVAL; 

SET EpocTimeStamp = TIMESTAMP '1970-01-01 00:00:00'; 
SET eventTimeStamp = (CURRENT_TIMESTAMP - EpocTimeStamp) SECOND * 1000;
CAST(eventTimeStamp AS INTEGER);
person Community    schedule 28.08.2019
comment
Вы знаете, о какой СУБД идет речь? Синтаксис узнаваем, но я не уверен, DB2 это или какая-то другая СУБД. Если вы можете его идентифицировать, я могу добавить к вопросу тег СУБД. - person Jonathan Leffler; 28.08.2019
comment
Ах хорошо. Я полагаю, это делает его extended-sql. Спасибо. - person Jonathan Leffler; 28.08.2019
comment
Спасибо @Cryostasys, это была просто моя ошибка... Я объявил eventTimeStamp как TIMESTAMP (а не как CHARACTER), и это сработало! Огромное спасибо! - person uniqk; 29.08.2019