如何比较SQL存储过程中的日期?

时间:2015-05-19 19:21:58

标签: sql stored-procedures informix

我想使用以下SQL语句在存储过程中查询数据库:

SELECT date1 FROM table INTO dates
WHERE date1 < CONVERT(VARCHAR(8), GETDATE(), 112)
AND date1 > CONVERT(VARCHAR(8), DATEADD(DAY, -4, GETDATE()), 112);

我在WHERE子句上遇到错误,我做错了什么?

2 个答案:

答案 0 :(得分:1)

假设date1是datetime类型,那么Use Between

SELECT date1  INTO dates FROM table
WHERE date1 BETWEEN  CONVERT(VARCHAR(8), DATEADD(DAY, -4, GETDATE()), 112) AND
                     CONVERT(VARCHAR(8), GETDATE(), 112);

如果date1不是日期时间,则将其转换为“之间使用

   SELECT date1 INTO dates FROM table 
    WHERE CONVERT(VARCHAR(8), date1, 112) BETWEEN  CONVERT(VARCHAR(8), DATEADD(DAY, -4, GETDATE()), 112) AND
                         CONVERT(VARCHAR(8), GETDATE(), 112);

答案 1 :(得分:1)

语法错误是因为INTO错误。

1)但正如@Jonathan所提到的那样,GETDAT,CONVERT,DATEADD这些功能 不是本机的,在INFORMIX数据库中不存在。除非你创造它...
  2)“日期”应该是您SPL的变量。

3)SELECT应该只返回1行....

SELECT date1 INTO dates FROM table 
WHERE date1 < CONVERT(VARCHAR(8), GETDATE(), 112)
AND date1 > CONVERT(VARCHAR(8), DATEADD(DAY, -4, GETDATE()), 112);

这应该是有效的Informix语法:

SELECT date1 INTO dates FROM table 
WHERE date1 < today
AND date1 > today - 4 units day ;

有关语法的详细信息,请查看IBM Knowledge Center