我写的查询
SELECT Date_current,
COUNT(*) as'Total'
FROM Call_Register
WHERE (DATEDIFF(dd,'02/1/2014',Date_current) >=0)
AND (DATEDIFF(dd,'02/12/2014',Date_current) <=0)
GROUP BY Date_current
HAVING COUNT(*)>=(convert(int,'02/12/2014')) \
ORDER BY Date_current
但是这个查询给了我错误:
Conversion failed when converting the varchar value '02/12/2014' to data type int.
Date Total
---------- -------
Feb 3 2014 2:58PM 10
Feb 4 2014 2:59PM 10
请帮帮我
获得输出
日期总计
---------- -------
2014年2月3日下午2:58 1
2014年2月3日下午2:59 1
2014年2月3日下午3:00 1
2014年2月3日下午3:08 1
2014年2月3日下午3:20 1
2014年2月3日下午4:05 1
2014年2月3日下午4:17 1
2014年2月3日下午4:19 1
2014年2月3日下午4:21 1
2014年2月3日下午4:24 1
2014年2月4日下午1:11 1
2014年2月4日下午2:35 1
2014年2月4日下午2:37 1
2014年2月4日下午5:19 1
答案 0 :(得分:1)
您需要在此之后投射您的字符串日期,只有您可以继续使用Int CAST
CAST('02/12/2014' AS Datetime)
试试这个
SELECT Date_current,COUNT(*) AS 'Total'
From Call_Register
WHERE (DATEDIFF(dd,'02/1/2014',Date_current)>=0) AND
(DATEDIFF(dd,'02/12/2014',Date_current)<=0)
Group By Date_current
having COUNT(*)>=(convert(int, CAST('02/12/2014' AS Datetime)) order By Date_current
答案 1 :(得分:1)
首先,您应该使用文化不变日期格式yyyyMMdd
,或使用SET DATEFORMAT DMY
显式设置日期格式,或准备获得不一致的结果。
其次,以下内容可能非常低效:
WHERE (DATEDIFF(dd,'02/1/2014',Date_current) >=0)
AND (DATEDIFF(dd,'02/12/2014',Date_current) <=0)
如果您在Date_Current
上有索引,则不会使用该索引,因为您正在对其执行某项功能。你应该使用:
WHERE Date_Current >= '20140102'
AND Date_Current <= '20141202'
然后您有一个sargable查询。我不得不猜测'02 / 1/2014'是指2014年2月1日,还是2014年1月2日,因为它不清楚(因此我的第一点的重要性)。
最后(这部分已经得到了回答,但为了完整性而包含它,因为我不能指出前两个错误)你不能在这里转换为int:
convert(int,'02/12/2014')
您可能需要先转换为日期时间:
CONVERT(INT, CONVERT(DATETIME, '20141202'))
虽然我怀疑这仍然不是你想要的,但你只是过滤那些拥有41973条或更多记录的日子,看起来像是一个相当随意的过滤器....
答案 2 :(得分:1)
最后得到了所有人的问题
SELECT cast(Date_current as DATE),COUNT(*) AS 'Total'
From Call_Register
WHERE (DATEDIFF(dd,'02/1/2014',Date_current)>=0) AND
(DATEDIFF(dd,'02/13/2014',Date_current)<=0)
Group By cast(Date_current as DATE)
我可以在这个cos中使用order by我希望它按降序pl帮助