繁体   English   中英

DB2将数字转换为日期

[英]DB2 Convert Number to Date

由于某些原因(我对此无能为力),日期以整数形式存储在我需要查询的iSeries AS400 DB2系统中。 例如今天将存储为:

20,171,221

在英国,我需要它与日期格式类似如下:

21/12/2017

这是从我的查询中得出的:(OAORDT = date字段)

Select
Date(SUBSTR( CHAR( OAORDT ),7,2) ||'/' || SUBSTR(CHAR ( OAORDT ),5,2) || '/' || SUBSTR(CHAR (OAORDT ),1,4)) AS "Order Date"
from some.table

但是,我得到的只是空值。 如果删除Date函数,则它可以正常工作,但现在是一个字符串,我不希望这样:

Select
SUBSTR( CHAR( OAORDT ),7,2) ||'/' || SUBSTR(CHAR ( OAORDT ),5,2) || '/' || SUBSTR(CHAR (OAORDT ),1,4) AS "Order Date"
from some.table

如何将OAORDT字段转换为Date?

只是为了更新-我将使用OpenQuery从MS SQL Server查询此信息

谢谢。

1)如何将OAORDT字段转换为Date?
最简单的是使用TIMESTAMP_FORMAT

SELECT DATE(TIMESTAMP_FORMAT(CHAR(OAORDT),'YYYYMMDD'))

2)在英国,我需要以日期格式21/12/2017 [...]:

SELECT VARCHAR_FORMAT(DATE(TIMESTAMP_FORMAT(CHAR(OAORDT),'YYYYMMDD')),'DD/MM/YYYY')

注意,您没有指定执行此操作的位置,但是由于您将其标记为ibm-midrange,因此我在回答嵌入式SQL。 如果要使用JDBC,ODBC或交互式SQL,则概念相似,只是实现方式不同。

确保SQL使用的日期格式正确,默认为*ISO 对您来说应该是*EUR 在RPG中,您可以这样操作:

exec sql set option *datfmt = *EUR;

确保set option是程序中的第一条SQL语句,我通常将其立即放在D和C规范之间。

请注意 ,这不是程序的最佳解决方案。 最佳做法是将RPG和SQL日期格式都设置为* ISO。 我喜欢明确地做到这一点。 RPG日期格式由

ctl-opt DatFmt(*ISO);

SQL日期格式设置为

exec sql set option *datfmt = *ISO;

现在,所有内部日期都以* ISO格式处理,并且没有年份范围限制(年份可以是0001-9999)。 而且,您可以按自己喜欢的任何格式显示或打印。 同样,您可以接收任意格式的输入。

编辑日期是一种独特的野兽。 并非每种语言,OS也不知道如何处理它们。 如果要查找“日期”值,则需要指定的唯一格式是要转换为“日期”的字符串的格式。 您不需要(不能)指定“日期”字段的内部格式,“日期”字段的外部格式可以是您想要的任何内容,并且每次使用时都可以不同。 因此,当您使用TIMESTAMP_FORMAT()作为@ Stavr00时提到:

DATE(TIMESTAMP_FORMAT(CHAR(OAORDT),'YYYYMMDD'))

提供的格式不是Date字段的格式,而是要转换为Timestamp的数据的格式。 然后, Date()函数将Timestamp值转换为Date值。 此时格式无关紧要,因为无论您由*DATFMT指定哪种外部格式,时间戳都采用内部时间戳格式,而日期值采用内部日期格式。 下一次格式很重要,是当您将日期值作为字符串或数字提供给用户时。 在这一点上的格式可以设置为*ISO*EUR*USA*JIS*YMD*MDY*DMY*JUL ,并在某些情况下, *LONGJUL*Cxxx格式可供选择。

由于没有任何一种适合我的需求,因此我提出了自己的需求。

它很简单:

select * from yourschema.yourtable where yourdate = int(CURRENT DATE - 1 days) - 19000000;

days事情是leap年的,适合大多数需求。

同样的days可以变成monthsyears 不需要像VARCHAR_FORMAT / TIMESTAMP_FORMAT这样的重型火炮。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM