日期的SQL查询帮助

时间:2015-06-05 16:02:30

标签: ibm-midrange db2-400

我不是最好的SQL,所以我需要一些帮助。我有一个现有的查询,我们用来从DB2 for IBM i(AS400)提取数据,我想修改它,因此它只是提取最近6个月的数据,而不是不断改变范围。我相信OHSTDT字段在服务器上保存为YYYYMMDD。

WHERE GRPORDH.ODSTDT = GRPPHDR.OHSTDT AND GRPORDH.ODGRPH = GRPPHDR.OHGRPH AND (GRPPHDR.OHSTDT Between {d '2013-01-01'} And {d '2015-06-01'})

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

构建或下载将日期类型转换为数字的函数。

我使用的是iDate:
www.think400.dk/downloads.htm

然后您的查询变为:

WHERE GRPORDH.ODSTDT = GRPPHDR.OHSTDT 
  AND GRPORDH.ODGRPH = GRPPHDR.OHGRPH 
  AND GRPPHDR.OHSTDT between ConvertToIDate(CURRENT_DATE - 6 MONTHS,'*CCYMD')
                         AND ConvertToIDate(CURRENT_DATE,'*CCYMD')

请注意备用表格:

WHERE GRPORDH.ODSTDT = GRPPHDR.OHSTDT 
  AND GRPORDH.ODGRPH = GRPPHDR.OHGRPH 
  AND iDate(GRPPHDR.OHSTDT) between CURRENT_DATE - 6 MONTHS
                         AND CURRENT_DATE

使用iDate()函数从数字日期转换为日期日期不是首选方法。它会工作,你会发现很多这样做的例子。但由于两个原因,它表现不佳。

  • 更多转化
  • 无法使用OHSTDT上的索引。

iDate()函数和ConvertToIDate()函数都可以在iDate库中找到,您可以在上面的链接下载。