我们从运行i5 AS / 400数据库的合作伙伴处获取数据 他们的日期列都是YYYYMMDD格式。在我的查询中,我想在上个月只添加一些内容。
我知道我可以获得current_date并减去1个月,但它有日期格式 所以我的选择是采取YYYYMMDD并将其转换为日期格式,或采取当前日期并将其更改为YYYYMMDD格式。
由于在tsql的convert命令中缺少AS / 400,我不确定哪种方式最好。
答案 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了解有关此选项的更多信息。