Ответ 1
Я изучил некоторые другие проблемы с базой данных, после перезагрузки он начал работать, поэтому теперь это работает правильно:
registrationdate > '2002-10-01'
У меня есть поле типа 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'
Как мне сравнить даты?
Я изучил некоторые другие проблемы с базой данных, после перезагрузки он начал работать, поэтому теперь это работает правильно:
registrationdate > '2002-10-01'
Стандартный формат SQL для литерала DATE:
DATE '2002-10-01'
По крайней мере, стоит попробовать:
SELECT *
FROM table
WHERE registrationdate > DATE '2002-10-01';
Формат по умолчанию, используемый для дат, определяется кодом территории базы данных 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';
Используйте этот формат.
registrationdate > 'mm/dd/yyyy'