【问题标题】:How to compare dates in SQL stored procedure?如何比较 SQL 存储过程中的日期?
【发布时间】:2015-05-19 19:21:58
【问题描述】:

我想使用以下 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 包含什么值?
  • date1 列的格式是什么?我假设不是日期时间?
  • 您在 where 子句中遇到什么错误?
  • 我收到语法错误。
  • date1 是 SQL 中的 DATE 类型。

标签: sql stored-procedures informix


【解决方案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

【讨论】:

  • 奇怪的是,我能够使用 DATEADD、GETDATE 和 CONVERT 创建存储过程。在我将它用于某些数据之前,我不知道该查询是否真的有效。
  • 我将此语法视为 MS SQL SERVER,可能无法正常工作。如果 date1 是 date 或 datetime 数据类型,您可以将 convert+getdate 替换为 TODAYkeyword。在第二个 convert() 表达式中,您可以用这个 today -4 units day 替换它。
  • 可以发布这段代码的样子,不知道today -4 units day是什么意思
  • 关于select只返回一行,怎么创建只返回一行的sql语句,SELECT date1 INTO dates FROM table WHERE date1 &lt; CONVERT(VARCHAR(8), GETDATE(), 112) AND date1 &gt; CONVERT(VARCHAR(8), DATEADD(DAY, -4, GETDATE()), 112);会需要IF条件吗?
  • 我能够利用 UNITS DAY 来解决我遇到的问题,SQL 与 Informix 之间存在一些关键差异。
【解决方案2】:

假设 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 不是日期时间,则将其转换为 then 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    相关资源
    最近更新 更多