从十进制 (8, 0) 格式的日期开始 n-3 或 n-x 个月(~90 天前),在 SQL 服务器和 DB2 中具有年份变化影响
get n-3 or n-x months (~90 days before) from a date in Decimal (8, 0) format with year change impact in SQL Server and DB2
我有一个以 YYYYMMDD 格式表示日期的小数列 (Decimal (8, 0))。例如,20200101。
现在,我想得到 20191001。我该怎么做?
注意:在此示例中,您的数据类型为 int 的列称为 date_col
,table 称为 test
。
在 SQLSERVER 上试试:
select dateadd(DAY, -90, convert(date, convert(char(8), date_col, 23)))
from test;
DATEADD
将从日期减去 90 天。
您可以通过以下方式获得准确的结果 20191001
select convert(char(8), dateadd(DAY, -92, convert(char(8), date_col)), 112)
from test;
在 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;
select CONVERT(varchar, dateadd(dd, -92, convert(date, convert(varchar, '20200101'))), 112)
DB2:
VALUES DATE(TO_DATE(rtrim(char(20200101)), 'yyyymmdd')) - 3 month;
我有一个以 YYYYMMDD 格式表示日期的小数列 (Decimal (8, 0))。例如,20200101。 现在,我想得到 20191001。我该怎么做?
注意:在此示例中,您的数据类型为 int 的列称为 date_col
,table 称为 test
。
在 SQLSERVER 上试试:
select dateadd(DAY, -90, convert(date, convert(char(8), date_col, 23)))
from test;
DATEADD
将从日期减去 90 天。
您可以通过以下方式获得准确的结果 20191001
select convert(char(8), dateadd(DAY, -92, convert(char(8), date_col)), 112)
from test;
在 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;
select CONVERT(varchar, dateadd(dd, -92, convert(date, convert(varchar, '20200101'))), 112)
DB2:
VALUES DATE(TO_DATE(rtrim(char(20200101)), 'yyyymmdd')) - 3 month;