AS400 YYYYMMDD - 1个月

时间:2011-12-01 19:18:07

标签: ibm-midrange

我们从运行i5 AS / 400数据库的合作伙伴处获取数据 他们的日期列都是YYYYMMDD格式。在我的查询中,我想在上个月只添加一些内容。

我知道我可以获得current_date并减去1个月,但它有日期格式 所以我的选择是采取YYYYMMDD并将其转换为日期格式,或采取当前日期并将其更改为YYYYMMDD格式。

由于在tsql的convert命令中缺少AS / 400,我不确定哪种方式最好。

3 个答案:

答案 0 :(得分:4)

我从MIDRANGE-L list了解了这个技巧。

YYYYMMDD <= DEC(REPLACE(CHAR(CURRENT_DATE - 1 MONTH, ISO), '-', ''), 8, 0)

答案 1 :(得分:1)

您最好的选择是以YYYYMMDD格式提供您所寻求的日期。这样你就可以让数据库完成将数据与查询规范进行比较的工作。

答案 2 :(得分:1)

我假设您说日期列实际上是八位数字字段,恰好包含我们将其解释为日期的值。我还假设您直接针对i5数据库运行这些查询。

您需要将日期转换为YYYYMMDD数值,然后根据YYYYMMDD字段进行查询。将数据库中的YYYYMMDD值转换为日期并与之进行比较将需要转换每个值,这将消除在该列上使用索引的可能性。它还可以解决由于YYYYMMDD字段中的无效日期而导致的问题。

以下是将日期计算转换为八位数字作为YYYYMMDD的示例:

select year(current_date - 1 month) * 10000 +
       month(current_date - 1 month) * 100 + 
       day(current_date - 1 month)           
from sysibm.sysdummy1                        

你可以在这样的查询中使用它:

select *                              
from libname.tablename                    
where date_field >=                          
  year(current_date - 1 day) * 10000 +
  month(current_date - 1 day) * 100 + 
  day(current_date - 1 day)           

另一种方法是使用IDATE之类的工具。这使得数字转换日期变得更加容易。 Go to this link and search for IDATE了解有关此选项的更多信息。