我想要输出sql Query,我已经完成了一些查询部分,但它失败了

时间:2014-02-12 11:13:04

标签: sql sql-server-2008

我写的查询

   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

3 个答案:

答案 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帮助