Ответ состоит из двух частей. Первый связан с датой математики в этом конкретном варианте DB2. Выражение DB2, эквивалентное curdate()) + 7
, равно current date + 7 days
.
Второе включает преобразование значений даты в значения символов (или наоборот), чтобы мы могли их сравнить. Нам нужно знать, в каком формате chardate
хранятся даты, прежде чем мы сможем их реально взломать. Давайте предположим, что это в формате YYYY-MM-DD
. Затем вы можете использовать char(current date + 7 days, iso)
, чтобы получить в будущем семь дней в том же формате.
Итак, с этим допущением ваше утверждение where будет
where chardate >= char(current date + 7 days, iso)
Существует несколько стандартных форматов даты, которые date
может преобразовать в:
- ISO:
YYYY-MM-DD
- США:
MM/DD/YYYY
- EUR:
DD.MM.YYYY
- JIS:
YYYY-MM-DD
Если ваш chardate
находится в другом формате, вам нужно будет выполнить довольно сложную работу с substr
. Например, для преобразования YYYY-MM-DD
в YYYYMMDD
вам потребуется что-то вроде
substr(char(current date, iso), 1, 4) ||
substr(char(current date, iso), 5, 2) ||
substr(char(current date, iso), 7, 2)
Основная проблема этого метода заключается в том, что форматы, которые не хранятся в порядке «год-месяц-день», не могут быть надежно сопоставлены. Таким образом, 12311969
(т.е. MMDDYYYY
) будет сравниваться как больше, чем 01012011
, поскольку в отношении базы данных вы сравниваете два восьмизначных числа. (Вот почему вы почти всегда должны хранить даты в реальных date
полях или в YYYYMMDD
или аналогичном правильно упорядоченном формате.)
Я добился большого успеха, используя бесплатную утилиту idate , которая предоставляет пользовательские функции SQL (UDF) для преобразования дат, хранящихся в символьных и числовых полях, в даты. Обратите внимание, что это решение требует наличия компилятора RPG.