2
查看SQL Server上year()
的返回值,它似乎是一个int。SQL Server等于int和字符串之间的比较?
那么为什么下面的语句返回'相等'?
为什么比较运算符认为int 2002
和字符串'2002'
相等?应该是?
select
case
when year('2002-01-14 00:00:00.000') = '2002' then 'equal'
else 'not equal'
end
是的,sql服务器正在执行一个将“2002”更改为int的implict。它总是试图将第二种数据类型转换为第一种数据类型。 – xQbert
是否应该发生并不重要。重要的是你知道发生了什么并据此编码。 –
好问题,以及来自@xQbert的不错答案。有一些反对使用[隐式转换]的非常好的论据(https://www.sqlskills.com/blogs/jonathan/implicit-conversions-that-cause-index-scans/)。作为一般规则,我尝试在我的dbs中避开它们。 –