/ / Випуск DB2 з вибором дати, в основному хочуть попередні 12 місяців від поточної дати - db2

Випуск DB2 з вибором дати, в основному, вимагає попередніх 12 місяців з поточної дати - db2

Гаразд наступне where пункт працює, за винятком січня, коли в розрахунку виявляється недійсна дата:

WHERE
(DATE((DIGITS(LNYYP2) || "-" || DIGITS(LNMMP2) || "-" || DIGITS(LNDDP2))) >
((CURRENT DATE - DAY (CURRENT TIMESTAMP) DAYS)) - 13 MONTH)
AND DIGITS(SHFP02.LNYYP2) || "-" || DIGITS(LNMMP2) <>
YEAR (CURRENT TIMESTAMP) || "-" || MONTH (CURRENT TIMESTAMP)

Відповіді:

0 для відповіді № 1

На жаль, схоже, ви використовуєте іншу БД, ніж я думав. Це відповідь на те, як вирішити цю проблему в SQL Server.

Оригінальний Anser:

Я не впевнений, що саме відбувається у цьому пункті, але ви можете отримати це 12 місяців тому DATEADD. Якщо вам потрібно отримати перше число місяця, ви можете створити його за допомогою DATEFROMPARTS.

declare @today date;
declare @past date;

set @today = SYSDATETIME();
set @past =  dateadd(month, -12, @today)

select @today, @past, DATEFROMPARTS(YEAR(@past), MONTH(@PAST), 1)

0 для відповіді № 2

Потенційна проблема:

Що стосується другої умови,

(DATE((DIGITS(LNYYP2) || "-" || DIGITS(LNMMP2) || "-" || DIGITS(LNDDP2))) >
((CURRENT DATE - DAY (CURRENT TIMESTAMP) DAYS)) - 13 MONTH)

Ви порівнюєте два рядки, а не дві дати абодва набори чисел. Я не впевнений, що це ваша проблема, тому що ви не надаєте зразків даних, які дають правильні чи неправильні відповіді, але, можливо, це може бути краще записано як:

and (lnyyp2, lnmmp2) not in (values(int(year(current date)), int(month(current date)))