我正在尝试对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()时,为什么它不起作用?
答案 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)
我希望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)
该类型最终只是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)