2016-11-11 86 views
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 

Microsoft's Year Doc.

+3

是的,sql服务器正在执行一个将“2002”更改为int的implict。它总是试图将第二种数据类型转换为第一种数据类型。 – xQbert

+1

是否应该发生并不重要。重要的是你知道发生了什么并据此编码。 –

+1

好问题,以及来自@xQbert的不错答案。有一些反对使用[隐式转换]的非常好的论据(https://www.sqlskills.com/blogs/jonathan/implicit-conversions-that-c​​ause-index-scans/)。作为一般规则,我尝试在我的dbs中避开它们。 –

回答

2

因为SQL Server是隐式铸造“2002”,以在平等检查的第一个值的数据类型。 (int)在这种情况下