我收到此错误,虽然我试图搜索现有答案,但我无法实现是在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
有什么建议吗? 非常感谢
答案 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中日期/时间文字的唯一真正安全格式(至少
datetime
和smalldatetime
)是:YYYYMMDD
和YYYY-MM-DDThh:mm:ss[.nnn]
- documentation
答案 1 :(得分:0)
2014-01-01
是一个整数 - 2014
减去 1
减去 1
或2012
。如果用单引号('
)包围这些表达式,它们将成为字符串,并且从字符串到日期的隐式转换应该可以解决问题:
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