найти разницу во времени в DB2 - PullRequest
0 голосов
/ 05 июля 2010

Как мне написать запрос в DB2 для следующего:

Разница между текущей отметкой времени и полем отметки времени в дБ должна быть> = 4 часа И <= 24 часа </p>

Кто-топредложил это, но это не работает.

select * from tableName where 
                 date <=  DATEADD([hour], -4, CURRENT_TIME) and 
                 date date >=  DATEADD([hour], -24, CURRENT_TIME)

Но это не работает.Это дает следующую ошибку.

SQL0104N  An unexpected token "[hour]" was found following "ortdate <=  
DATEADD(".  Expected tokens may include:  "<func_arg_list>".  SQLSTATE=42601

Ответы [ 3 ]

3 голосов
/ 09 июля 2010
select * 
from   table t
where  t.tscolumn between current timestamp - 24 hours 
                      and current timestamp - 4 hours
0 голосов
/ 18 января 2011

DB2 не любит квадратные скобки вокруг имени - это манера MS SQL Server.

Единственная ссылка на DATEADD () в Информационном центре DB2 9.7 (о, прошу прощения: Центр - однажды американцы научатся правильно писать) - в «Все следующие выражения в пакете com.ibm.alphablox.bloxbuilder.lib.expression ', что вызывает недоумение. Я подозреваю, что поиск ошибочен - хотя при переходе к Руководству по SQL и поиску перечисленных там функций DATEADD явно отсутствует, поэтому, возможно, это не так.

Итак, вам придется вручную bash для синтаксиса DB2. Но, если что-то сработает, это может включать:

DATEADD(HOUR, -4, CURRENT_TIME)

вместо любых квадратных скобок. Тем не менее, несколько более обширный поиск, включая RedBook on DB2 и Oracle Compatibility, не показывает DATEADD как функцию, поддерживаемую DB2. Итак, маршрут DATEADD обречен на ... проблемы.

Поскольку DB2 (все еще) не имеет надлежащего (стандартного SQL) типа INTERVAL, вы изучаете «длительности». См. DevX для объяснения, но будьте осторожны с количеством файлов cookie, которые сайт «.qnsr.com» хочет установить. И прочитайте руководства в Информационном центре DB2.

0 голосов
/ 05 июля 2010

Используйте только Hour вместо [hour]

select * from tableName where 
                 date <=  DATEADD(Hour, -4, CURRENT_TIME) and 
                 date date >=  DATEADD(Hour, -24, CURRENT_TIME)
...