Я пытаюсь преобразовать текущую дату - 2 месяца в формат ггггммдд и вычесть из нее 1900000.
Oracle был для меня легким
SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-2),'YYYYMMDD') - 19000000 FROM DUAL
Может кто-нибудь предложить мне то же самое для AS400 .
Заранее спасибо.
Это должно сработать:
select char(((year(d)-1900) * 100 + month(d)) * 100 + day(d)) from (select (curdate() - 2 months) as d from sysibm/sysdummy1) s
или, если вы предпочитаете делать то же самое без вложенного выбора, выберите:
select char(((year(curdate() - 2 months) - 1900) * 100 + month(curdate() - 2 months)) * 100 + day(curdate() - 2 months)) from sysibm/sysdummy1
Приветствия
Простейшим может быть:
SELECT DEC(REPLACE(CHAR(CURDATE() - 2 MONTHS,ISO),'-',''))-19000000 FROM SYSIBM/SYSDUMMY1
Некоторые думают, что можно найти что-то лучше.но это не станет намного проще, несмотря ни на что.
Это небольшой поздний ответ, но он должен помочь:)
select char((year(curdate() - 2 months) * 100 + month(curdate() - 2 months)) * 100 + day(curdate() - 2 months)) from sysibm/sysdummy1
Это почти то же самое, что и ответ karol.mlot, однако вы получите правильный формат, так как вы просилиГГГГММДД
ВЫБРАТЬ DEC (SUBSTR (CHAR (ДАТА (СЕЙЧАС ()) - 2 МЕСЯЦА), ISO), 1, 4) || SUBSTR (CHAR (ДАТА (СЕЙЧАС ()) - 2 МЕСЯЦА), ISO), 6, 2) || SUBSTR (CHAR (ДАТА (СЕЙЧАС ()) - 2 МЕСЯЦА), ISO), 9, 2), 8, 0) - 19000000 ОТ ДВОЙНОГО
EVAL numericField = %dec(%date(alphaDate:*MDY/):*MDY)
Параметр после поля char должен быть форматом поля char (в качестве примера я использовал * MDY с "/").
Параметр parm в конце выражения должен быть форматом числового поля. Таким образом, этот пример преобразует 22.11.2008 в 11222008.
Если вы хотите преобразовать 2008-11-22 в 20081122, сделайте оба параметра * ISO.