Короткая версия:
Как узнать разницу в секундах между двумя временными метками через драйвер ODBC?
Длинная версия:
Использование ODBC для простого запроса (не то, чтобы я использовал приведение (... в качестве временной метки) для создания отдельной строки, фактический запрос выполняется для таблицы с данными временной метки):
select unix_timestamp(cast('2019-02-01 01:02:03' as timestamp)) as tto
Я получил сообщение об ошибке:
unix_timestamp не является допустимым скалярным вызовом функции или процедуры
Я не смог найти ни одного параметра конфигурации, который мог бы изменить это.Собственный запрос отключен (потому что я использую подготовленные операторы), и другие функции работают нормально.Я предполагаю, что unix_timestamp () (без параметра) устарела, и драйвер немного увлечен предотвращением использования этой функции.
Я попытался обойти проблему, и я использовал метку времени как bigint вместоиспользуя функцию unix_timestamp:
select cast(cast('2019-02-01 01:02:03' as timestamp) as bigint)
Это отлично работает!Но когда я пытаюсь получить разность 2 отметок времени:
select cast(cast('2019-02-01 01:02:03' as timestamp) as bigint) - cast(cast('2019-02-01 01:02:03' as timestamp) as bigint)
, я получаю сообщение
Типы операндов SQL_WCHAR и SQL_WCHAR несовместимы для двоичного оператора минус
(но только для сложных запросов, но не в том случае, если запрос состоит только из этого выбора).
Драйвер примет разность между 2 временными метками, но затем я получаю интервальный тип,которые я не могу преобразовать обратно в секунды.
Я бы посчитал, что это ошибки в драйвере ODBC, но я не могу связаться с Hortonworks, потому что я не являюсь платящим клиентом, и я также не могу связаться с Симбой, потому что я неплатящий клиент.
Если заметить, если я пытаюсь использовать функцию floor
, я получаю сообщение:
'floor' - зарезервированное ключевое слово.
Да, я знаю, что это зарезервировано, и я на самом деле пытаюсь это сделать.
Есть идеи, как мне обойти это?