date与int不兼容

时间:2017-06-13 17:47:40

标签: sql

我收到此错误,虽然我试图搜索现有答案,但我无法实现是在mt查询

所以我有:

  

Msg 206,Level 16,State 2,Line 3   操作数类型冲突:日期与int

不兼容

这是我的疑问:

Select   emp_desc, SUM(Price*Num_Of_Products) 
from     sales
Where    sale_date between 2014-01-01 and 2017-01-01
GRoup By emp_desc

有什么建议吗? 非常感谢

4 个答案:

答案 0 :(得分:5)

日期文字周围的单引号:

select 
    emp_desc
  , sum(Price * Num_Of_Products)
from sales
where sale_date >= '20140101' 
  and sale_date <  '20170101'
group by emp_desc

此外,between可能没有做你认为它在那里做的事情。

参考:

  

SQL Server中日期/时间文字的唯一真正安全格式(至少datetimesmalldatetime)是:YYYYMMDDYYYY-MM-DDThh:mm:ss[.nnn] - documentation

答案 1 :(得分:0)

2014-01-01是一个整数 - 2014 减去 1 减去 12012 。如果用单引号(')包围这些表达式,它们将成为字符串,并且从字符串到日期的隐式转换应该可以解决问题:

SELECT   emp_desc, SUM(price * num_of_products)
FROM     sales
WHERE    sale_date BETWEEN '2014-01-01' AND '2017-01-01'
         -- Here ----------^----------^-----^----------^
GROUP BY emp_desc

答案 2 :(得分:0)

您需要在日期中使用撇号

Where sale_date between '2014-01-01' and '2017-01-01' GRoup By emp_desc

或列sale_date声明为int 所以你必须使用

Where sale_date between 20140101 and 20170101 GRoup By emp_desc

答案 3 :(得分:0)

以上肯定有用或只是添加单引号,如果日期以日期时间格式存储,您也可以尝试这种方式

Select   emp_desc, SUM(Price*Num_Of_Products) 
from     sales
Where    convert(varchar(10),sale_date,120)  between '2014-01-01' and '2017-01-01'
GRoup By emp_desc