получить n-3 или nx месяцев (~ 90 дней назад) от даты в десятичном (8, 0) формате с влиянием изменения года в SQL Server и DB2 - PullRequest
0 голосов
/ 29 января 2020

У меня есть десятичный столбец (Decimal (8, 0)), который представляет дату в формате ГГГГММДД. Например, 20200101. Теперь я хочу получить 20191001. Как я могу это сделать?

Ответы [ 3 ]

2 голосов
/ 29 января 2020

Примечание: в этих примерах ваш столбец с типом данных int называется date_col, а таблица называется test.

Попробуйте это на SQLSERVER :

select dateadd(DAY, -90, convert(date, convert(char(8), date_col, 23))) 
from test;

DATEADD будет вычитать 90 дней с даты.

Вот DEMO

Вот как вы можете получить точный результат 20191001

select convert(char(8), dateadd(DAY, -92, convert(char(8), date_col)), 112) 
from test;

Вот DEMO

Попробуйте это на DB2 :

select date(to_date(date_col, 'yyyymmdd')) - 90 days 
from test;

Вот ДЕМО

Я вижу, что вы хотите точный 20191001 результат. Вот пример для DB2:

select to_char(to_date(date_col, 'yyyymmdd') - 92 days, 'yyyymmdd') 
from test;

Вот пример DEMO

1 голос
/ 29 января 2020
select CONVERT(varchar, dateadd(dd, -92, convert(date, convert(varchar, '20200101'))), 112)
0 голосов
/ 29 января 2020

DB2:

VALUES DATE(TO_DATE(rtrim(char(20200101)), 'yyyymmdd')) - 3 month;

Пример dbfiddle

...