将int YYYYMMDD转换为AS400

问题描述 投票:1回答:4

我需要在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')
sql excel db2 ibm-midrange
4个回答
3
投票

实际上,不要转换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'));

1
投票

在不导致查询中的复杂转换的情况下,最简单的方法是使用:

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))

0
投票

管理将int转换为日期,首先我必须将其转换为字符串,然后使用TO_DATE

To_Date(cast(A.ivdat8 as varchar(50)),"YYYYMMDD")

0
投票

试试这个

Where cast(TIMESTAMP_FORMAT(cast(ivdat8 as varchar(8)), 'YYYYMMDD') as date)                                                        
      Between (current date - 3 days) and current date
© www.soinside.com 2019 - 2024. All rights reserved.