将 int YYYYMMDD 转换为日期 AS400



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

相关内容

  • 没有找到相关文章

最新更新