> = GETDATE()没有返回具有今天日期的行

时间:2013-12-30 15:06:28

标签: sql sql-server sql-server-2012 getdate

---------------------
| ID  |     date    |
|-----+-------------|
|  1  |  2013-12-30 |
|  2  |  2014-01-03 |
|  3  |  2014-02-02 |
---------------------

IDint类型

dateDate类型

当我使用SELECT CAST (getdate() as date) currentDay, ID FROM table WHERE date >= GETDATE()时,它只返回:

--------------------------------------
|  currentDay   |  ID  |     date    |
|---------------+------+-------------|
| 2013-12-30    |   2  |  2014-01-03 |
| 2013-12-30    |   3  |  2014-02-02 |
--------------------------------------

它不会返回ID=1行。

换句话说,>=GETDATE()不会返回包含今天日期的行。

我做错了什么?

2 个答案:

答案 0 :(得分:6)

它不会返回包含今天日期的任何行,因为GETDATE()会提供日期和时间。因此,在您的示例中,将2013-12-30转换为DATETIME会为您提供2013-12-30 00:00:00,其不等于或大于2013-12-30 12:09:35GETDATE()的结果我在这一刻)。你需要使用:

WHERE date >= CONVERT(DATE,GETDATE())

答案 1 :(得分:1)

GETDATE()函数返回当前日期和时间(即包括时间部分)。 所以今天的日期(没有时间部分)小于GETDATE()是正常的(除非您在午夜精确地运行查询)。这就是为什么你没有得到预期的结果。