Exasol SQL запрос TIMESTAMP

У меня есть данные Exasol с колонкой, которая выглядит следующим образом:

2016-10-25 08:01:36.0    
2016-10-25 08:30:09.0    
2016-10-25 09:00:15.0    
2016-10-26 08:02:38.0    
2016-10-26 10:00:44.0    
2016-10-27 10:00:44.0

тип данных этого столбца - TIMESTAMP. Теперь я хочу сформулировать запрос SQL, который показывает мне все строки, в которых время указано как до 12:00:00. Неважно, какая это дата (имеет значение только время), и отделите их от тех, что после 12:00:00. (было бы хорошо, если бы я мог сказать что-то вроде "между 8 и 12" и "от 12 до 18").

Заявления как это:

SELECT * FROM MySCHEMA.MyTable WHERE entryTime < '%12:00:00.%';
SELECT * FROM MySCHEMA.MyTable WHERE entryTime BETWEEN '%08:00:00.%' AND '%12:00:00.%';

не работают. Я получаю сообщение об ошибке:

'исключение данных - недопустимое значение для токена формата ГГГГ; Значение: "%12:00:00.%" Формат: "ГГГГ-ММ-ДД ЧЧ24:MI:SS.FF6"

так есть ли способ решить эту проблему, чтобы я мог выбрать период времени независимо от того, какая это дата?

1 ответ

Решение

Оператор SELECT для Exasol должен выглядеть следующим образом:

SELECT * FROM MySCHEMA.MyTable WHERE EXTRACT(HOUR FROM entryTime ) BETWEEN 8 and 10;

это эквивалент для оператора CAST(...).

Так что другой пример, где есть второе предложение WHERE, может выглядеть так:

SELECT * FROM MySCHEMA.MyTable WHERE myNames LIKE 'Sam%' AND EXTRACT(HOUR FROM entryTime ) BETWEEN 8 and 10;

результатом будет таблица людей / вещей с моими именами, такими как Сэм... (Саманта, Самуил, Самира....) и с записью времени между 08:00:00.0000 и 10:59:59.9999 независимо от того, какая это дата,

Точно такое же решение, как при использовании функции EXTRACT() с входным параметром HOUR, вы можете использовать функцию HOUR() следующим образом

SELECT * FROM EXA_DBA_AUDIT_SQL WHERE HOUR(START_TIME) BETWEEN 8 and 9; -- up to 9:59:59
Другие вопросы по тегам