0

我正在尝试针对 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() 时它不起作用?

4

5 回答 5

4

如果 SQL Server 2008:

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

(或者如果它是一个DATE列)

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

如果 < SQL Server 2008:

WHERE SentDate >= DATEDIFF(DAY, 0, GETDATE())
  AND SentDate <  DATEDIFF(DAY, -1, GETDATE());
于 2012-07-13T18:50:32.433 回答
2

我希望SentDate是一个datetime类型变量,是吗?

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

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)

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

WHERE SentDate = CONVERT(Date, GetDate())

于 2012-07-13T18:47:16.240 回答
0

Try this:

SELECT Count(*) 
  FROM tblSharesSentRequests 
 WHERE [SentDate] = CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME)
于 2012-07-13T18:49:27.773 回答
-1

SQL 函数 GETDATE() 返回日期和时间。您正在将它与我猜只有日期的字段进行比较。您将需要执行以下操作:

SELECT Count(*) 
  FROM tblSharesSentRequests 
 WHERE [SentDate] = CAST(GETDATE() AS date)
于 2012-07-13T18:53:24.550 回答
-1

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

于 2012-07-13T18:54:23.020 回答