Сравнение дат DB2

У меня есть поле типа DATE DB2 в таблице DB2. Я хочу выбрать данные по фильтру даты. Например:

SELECT *
FROM   table
WHERE registrationdate > '2002-10-01';

Из вышеприведенного запроса я получаю записи с регистрационной записью, начиная с '1943-10-01', но это неверно.

Они также не работают:

registrationdate > date('2002-10-01')
date(registrationdate) > date('2002-10-01')
date(registrationdate) > '2002-10-01'

Как мне сравнить даты?

Ответ 1

Я изучил некоторые другие проблемы с базой данных, после перезагрузки он начал работать, поэтому теперь это работает правильно:

registrationdate > '2002-10-01'

Ответ 2

Стандартный формат SQL для литерала DATE:

DATE '2002-10-01'

По крайней мере, стоит попробовать:

SELECT *
  FROM table
 WHERE registrationdate > DATE '2002-10-01';

Ответ 3

Формат по умолчанию, используемый для дат, определяется кодом территории базы данных DB2 (который может быть указан во время создания базы данных). Например, моя база данных была создана с использованием территории = США. Поэтому формат даты выглядит следующим образом:

values current date 
1 
---------- 
05/30/2003 

1 record(s) selected.

Вы можете получить код территории из DB CFG.

db2 get db cfg | egrep 'code|territory'
 Database territory                                      = US
 Database code page                                      = 1208
 Database code set                                       = UTF-8
 Database country/region code                            = 1

То есть формат MM/DD/YYYY. Если вы хотите изменить формат, вы можете привязать коллекцию пакетов утилиты db2 к использованию другого формата даты.

Чтобы получить текущую дату, время и временную метку с помощью SQL (в основном дает представление о формате даты), ссылайтесь на соответствующие регистры DB2: Таблица sysibm.sysdummy1 представляет собой специальную таблицу в памяти, которая может использоваться для обнаружения значения регистров DB2

db2 "SELECT current date FROM sysibm.sysdummy1 "

1
----------
06/02/2014

  1 record(s) selected.

Функция DATE по-прежнему работает, даже если мы не учитываем кавычки в функции, но результат неверен:

db2 "SELECT date(2001-09-22) FROM sysibm.sysdummy1 "

1
----------
05/24/0006

  1 record(s) selected.

Когда функция DATE получает строку символов в качестве входных данных, она предполагает, что она является допустимым символьным представлением даты DB2 и преобразует ее соответствующим образом. Напротив, когда ввод является числовым, функция предполагает, что он представляет количество дней минус один с начала текущей эры (то есть 0001-01-01). В вышеуказанном запросе вход был 2001-09-22, что равно (2001-9) -22, что равно 1970 дням.

И если все это применимо, команда ниже должна работать нормально для вашей проблемы.

SELECT * FROM table WHERE registrationdate > '10/01/2002';

Ответ 4

Используйте этот формат.

registrationdate > 'mm/dd/yyyy'