将打包的 DB2 系列值转换为 YYYY-MM-DD

Convert packed DB2 iseries value to YYYY-MM-DD

我正在尝试 select 来自日期字段大于今年第一天的 DB2 Iseries 系统的记录。

但是,我 select 从中获取的日期字段实际上是 PACKED 字段,而不是真实日期。

我正在尝试将它们转换为 YYYY-MM-DD 格式并获取大于“2018-01-01”的所有内容,但无论我尝试什么它都说无效。

目前正在尝试:

SELECT *
FROM table1 
        WHERE val = 145
        AND to_date(char(dateShp), 'YYYY-MM-DD') >= '2018-01-01';

它说表达式使用指定的格式字符串无效。

有什么想法吗?

char(dateshp) 将 return 像 '20180319'

这样的字符串

因此您的格式字符串不应包含破折号.. 'YYYYMMDD'
示例:

select to_date(char(20180101), 'YYYYMMDD')
from sysibm.sysdummy1;

所以你的代码应该是

SELECT *
FROM table1 
WHERE val = 145
     AND to_date(char(dateShp), 'YYYYMMDD') >= '2018-01-01';

Charles 为您提供了一个将 Packed 日期转换为日期字段的解决方案,如果您要与另一个日期字段进行比较,这是一个很好的解决方案。但是,如果您要与一个常量值或另一个数字字段进行比较,您可以只使用这样的东西:

select * 
  from table1
  where val = 145
    and dateShp >= 20180101;