从十进制 (8, 0) 格式的日期获取 n-3 或 n-x 个月(约 90 天前),在 SQL Server 和 DB2 中具有年份变化影响

Posted

技术标签:

【中文标题】从十进制 (8, 0) 格式的日期获取 n-3 或 n-x 个月(约 90 天前),在 SQL Server 和 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 【发布时间】:2020-01-29 07:57:28 【问题描述】:

我有一个十进制列 (Decimal (8, 0)),它以 YYYYMMDD 格式表示日期。例如,20200101。 现在,我想得到 20191001。我该怎么做?

【问题讨论】:

SQL Server?还是 DB2? 两者都需要。 【参考方案1】:

注意:在此示例中,您的 int 数据类型的列称为 date_col,表称为 test

SQLSERVER 上试试这个:

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

DATEADD 将从日期减去 90 天。

Here is the DEMO

以下是获得准确结果的方法20191001

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

Here is the DEMO

DB2 上试试这个:

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

Here is the DEMO

我知道您想要确切的 20191001 结果。下面是 DB2 的示例:

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

Here is the DEMO

【讨论】:

什么是'to_date'? 它将值转换为日期类型:dbfiddle.uk/… Sql DBx 返回 SQL0171 - 函数 TO_DATE 的参数 1 无效。 你在里面放了什么?您的列是 int 类型的? 十进制 (8, 0)。【参考方案2】:
select CONVERT(varchar, dateadd(dd, -92, convert(date, convert(varchar, '20200101'))), 112)

【讨论】:

【参考方案3】:

DB2:

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

dbfiddle example

【讨论】:

返回:SQL0171 - 函数 TO_DATE 的参数 1 无效。 @fasihullahkhan 您的 db2 版本和平台是什么?尝试使用显式 intvarchar 数据类型转换的更新示例。 ***.com/questions/60143431/… @fasihullahkhan 为什么你在这里提供另一个问题的链接?提供的解决方案是否解决了您在此处指定的问题? 是的,我有我的解决方案。如果你有时间,我想让你看看我的另一个问题。

以上是关于从十进制 (8, 0) 格式的日期获取 n-3 或 n-x 个月(约 90 天前),在 SQL Server 和 DB2 中具有年份变化影响的主要内容,如果未能解决你的问题,请参考以下文章

通过javascript或jquery从输入框中获取包含月-日期格式的值

如何使用 angular 2 或 javascript 从客户端计算机获取日期和时间格式?

bat获取当前日期

从标准格式获取自定义日期时间格式

如何使用 XSLT 2.0 获取当前日期时间的 RFC1123 日期格式

使用 javascript 从 cron 格式获取日期时间