DB2 将数字转换为日期

新手上路,请多包涵

由于某种原因(我无法控制),日期以整数形式存储在我需要查询的 iSeries AS400 DB2 系统中。例如今天将被存储为:

 20,171,221

在英国,我需要它在日期格式中如下所示:

 21/12/2017

这是来自我的查询:(OAORDT = 日期字段)

 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 字段转换为日期?

只是为了更新 - 我将使用 OpenQuery 从 MS SQL Server 查询这个

谢谢。

原文由 Michael 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
2 个回答
  1. 如何将 OAORDT 字段转换为日期?

最简单的是使用 TIMESTAMP_FORMAT

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

  1. 在英国,我需要 […] 日期格式 21/12/2017
 SELECT VARCHAR_FORMAT(DATE(TIMESTAMP_FORMAT(CHAR(OAORDT),'YYYYMMDD')),'DD/MM/YYYY')

原文由 Stavr00 发布,翻译遵循 CC BY-SA 3.0 许可协议

请注意,您没有指定在哪里执行此操作,但由于您标记为 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)。您可以以任何您喜欢的格式显示或打印。同样,您可以接收任何您喜欢的格式的输入。

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

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

提供的格式不是 Date 字段的格式,而是转换为 Timestamp 的数据格式。然后 Date() 函数将 Timestamp 值转换为 Date 值。此时格式无关紧要,因为无论您指定哪种外部格式 *DATFMT ,时间戳都是内部时间戳格式,日期值是内部日期格式。下一次格式很重要的时候是当您将 Date 值作为字符串或数字呈现给用户时。 At that point the format can be set to *ISO , *EUR , *USA , *JIS , *YMD , *MDY , *DMY , or *JUL , and in some cases *LONGJUL and the *Cxxx formats are available.

原文由 jmarkmurphy 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进