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

How to compare dates in SQL stored procedure?

我想使用以下 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 子句上出错,我做错了什么?

假设 date1 是 datetime 类型然后使用 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 不是 datetime,则将其转换为 Use Between

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

语法错误是因为INTO不对。

1) 但正如@Jonathan 所提到的,函数 GETDAT、CONVERT、DATEADD 不是本地的,也不存在于 INFORMIX 数据库中。除非你已经创建它...
2) "dates" 应该是您 SPL 的变量。

3) SELECT 应该 return 只有 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