从十进制 (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 版本和平台是什么?尝试使用显式int
到 varchar
数据类型转换的更新示例。
***.com/questions/60143431/…
@fasihullahkhan 为什么你在这里提供另一个问题的链接?提供的解决方案是否解决了您在此处指定的问题?
是的,我有我的解决方案。如果你有时间,我想让你看看我的另一个问题。以上是关于从十进制 (8, 0) 格式的日期获取 n-3 或 n-x 个月(约 90 天前),在 SQL Server 和 DB2 中具有年份变化影响的主要内容,如果未能解决你的问题,请参考以下文章
通过javascript或jquery从输入框中获取包含月-日期格式的值
如何使用 angular 2 或 javascript 从客户端计算机获取日期和时间格式?