我需要在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