我需要在AS400中将整数转换为日期格式。
我有一个名为 ivdat8
的字段,它是格式化YYYYMMDD
中的整数。
我需要使用 WHERE 子句来选择今天和 3 天前两个日期之间的数据。
我使用以下行来执行此操作:
Where
ivdat8 Between (Select current date - 3 days from sysibm.sysdummy1) And (Select current date from sysibm.sysdummy1)
来自 sysibm 的当前日期是真正的日期格式,但 ivdat 是整数。
如何将 ivdat8 转换为我可以在 WHERE 子句中使用的日期格式?
我已经尝试了以下方法来转换 int 到日期:
cast(cast(A.ivdat8 as varchar(50)) as date)
&
TIMESTAMP_FORMAT(ivdat8,'YYYYMMDD')
实际上,为了性能,最好不要转换ivdat8
列数据,而是使用如下所示的参数执行此操作。
select ivdat8
from table (values
int(to_char(current date - 2 days, 'YYYYMMDD'))
, int(to_char(current date - 5 days, 'YYYYMMDD'))
) t (ivdat8)
where ivdat8 between
int(to_char(current date - 3 days, 'YYYYMMDD'))
and int(to_char(current date, 'YYYYMMDD'));
在不导致查询中复杂转换的情况下执行此操作的最简单方法是使用以下命令:
cast(digits(cast(A.ivdat8 as dec(8))) || '000000' as date)
完整的 where 子句也不需要从 sysibm.dummy1 中进行选择。
where cast(digits(cast(A.ivdat8 as dec(8))) || '000000' as date) between current date - 3 days and current date
但是,如果您有基于 ivdat8 构建的索引,最快的选择将是:
where A.ivdat8 between cast(Current date - 3 days as dec(8)) and cast(Current Date as dec(8))
设法将 int 转换为日期,首先我必须将其转换为字符串,然后使用 TO_DATE
To_Date(cast(A.ivdat8 as varchar(50)),"YYYYMMDD")
试试这个
Where cast(TIMESTAMP_FORMAT(cast(ivdat8 as varchar(8)), 'YYYYMMDD') as date)
Between (current date - 3 days) and current date