Гаразд наступне 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)))