将打包的 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;
我正在尝试 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;