Как вы сравниваете метки времени? - PullRequest
4 голосов
/ 14 ноября 2011

Кажется немного тривиальным вопросом, но поведение, которое я использую с помощью hsqldb, противоречит интуиции. Следующий выбор не возвращает строк (учитывая тот факт, что я ранее вставил 2 строки со значением метки времени, равным CURRENT_TIMESTAMP):

SELECT * FROM webshop.transactions t WHERE (t.expiration_time <= CURRENT_TIMESTAMP)

Я ожидаю, что это может произойти из-за того, что перед сравнением метка времени преобразуется в число, которое может быть отрицательным. Это объясняет результаты, но все же поднимает вопрос, как вообще сравнивать временные метки?

Ответы [ 2 ]

2 голосов
/ 14 ноября 2011

Если столбец WEBSHOP.TRANSACTIONS.EXPIRATION_TIME определен как TIMESTAMP, то сравнение выполняется правильно. HSQLDB изначально поддерживает TIMESTAMP как тип данных, который можно сравнивать.

0 голосов
/ 14 ноября 2011

Вы сравниваете две строки, что определенно не то, что вы хотите. См. руководство для примеров того, как сделать это правильно. По сути, вместо t.expiration_time используйте t.expiration_time+0 для принудительного преобразования в число. То же самое для CURRENT_TIMESTAMP.

(Я не смог найти ссылку, относящуюся к hsqldb, но принцип тот же.)

...