2012-07-13 39 views
0

我试图执行对SQL Server 2008的这个查询:

SQL GETDATE()在统计查询工作不正常

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

'SentDate'是什么类型? – JonH 2012-07-13 18:50:27

+0

SentDate是一个“日期”字段。不是“日期时间”字段。 – fraXis 2012-07-13 18:50:54

+0

所以你可以对所有不同的类型使用'WHERE SentDate = Convert(Date,GetDate())' – JonH 2012-07-13 18:53:35

回答

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())

0

试试这个:

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

如果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()); 
+0

+1,这应该可以帮助任何Google员工。 – JonH 2012-07-13 19:51:09

-1

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

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

请不要发表相同的答案。 – JonH 2012-07-13 18:55:07

+0

我正在编写这个过程中,当另一个张贴在评论中。对不起 – 2012-07-13 18:58:30

-1

GETDATE()提供不只是它提供的小时,分​​钟etc.Thus你,你没有精确匹配得到了0值的日期。最好的办法是 SELECT Count(*)FROM tblSharesSentRequests WHERE [SentDate] = cast(getdate()as date)

+0

请不要发表相同的答案。 – JonH 2012-07-13 18:54:58

+0

我向他解释了为什么他的问题是错误的。只是给他一个查询对他至少不好。他应该知道实际发生了什么。 – 2012-07-14 04:55:12