Count查询中的SQL getdate()无法正常工作

时间:2012-07-13 18:45:51

标签: sql sql-server

我正在尝试对SQL Server 2008执行此查询:

SELECT Count(*) FROM tblSharesSentRequests WHERE [SentDate] = getdate()

这会返回0行,即使我有1行,其中SentDate设置为“2012-7-13”



这个SQL语句工作正常:

SELECT Count(*) FROM tblSharesSentRequests WHERE [SentDate] = '2012-7-13'

它返回1行。



当我使用getdate()时,为什么它不起作用?

5 个答案:

答案 0 :(得分:3)

如果是SQL Server 2008:

WHERE SentDate >= CONVERT(DATE, GETDATE())
  AND SentDate <  DATEADD(DAY, 1, CONVERT(DATE, GETDATE());

(或者,如果它是DATE列)

WHERE SentDate = CONVERT(DATE, GETDATE());

如果&lt; SQL Server 2008:

WHERE SentDate >= DATEDIFF(DAY, 0, GETDATE())
  AND SentDate <  DATEDIFF(DAY, -1, GETDATE());

答案 1 :(得分:2)

我希望SentDatedatetime类型变量,是吗?

如果是这样,请尝试从日期时间开始删除时间:

SELECT DATEADD(d, DATEDIFF(d, 0, GetDate()), 0)

所以你的查询变为:

SELECT Count(*) FROM tblSharesSentRequests WHERE [SentDate] = DATEADD(d, DATEDIFF(d, 0, getdate()), 0)

如果您使用的是2008,则可以在评论中说明:CAST(GetDate() as date)

更简单的表达方式是:

SELECT Count(*)
FROM tblSharesSentRequests
WHERE [SentDate] = cast(getdate() as date)

该类型最终只是Date而不是datetime。答案是使用以下内容:

WHERE SentDate = CONVERT(Date, GetDate())

答案 2 :(得分:0)

试试这个:

SELECT Count(*) 
  FROM tblSharesSentRequests 
 WHERE [SentDate] = CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME)

答案 3 :(得分:-1)

SQL函数GETDATE()返回日期和时间。您正在将它与我猜测只有日期的字段进行比较。你需要做这样的事情:

SELECT Count(*) 
  FROM tblSharesSentRequests 
 WHERE [SentDate] = CAST(GETDATE() AS date)

答案 4 :(得分:-1)

getdate()不仅提供它提供小时分钟的日期等等。因此你得到了0值,因为你没有完全匹配。最好的方法是     SELECT Count(*)FROM tblSharesSentRequests WHERE [SentDate] = cast(getdate()as date)