【发布时间】:2014-09-28 07:42:33
【问题描述】:
我在 SQL Server 2012 上运行此查询:
select 'weird'
where '' = 0
它正在返回'weird'。
据我了解,'' 与 0 完全不同。所以请解释为什么会发生上述情况。
谢谢
【问题讨论】:
标签: sql sql-server where behavior
我在 SQL Server 2012 上运行此查询:
select 'weird'
where '' = 0
它正在返回'weird'。
据我了解,'' 与 0 完全不同。所以请解释为什么会发生上述情况。
谢谢
【问题讨论】:
标签: sql sql-server where behavior
所以,看看它们在WHERE 子句中的数据类型
SELECT SQL_VARIANT_PROPERTY(0, 'BaseType'),SQL_VARIANT_PROPERTY('', 'BaseType')
他们分别返回int, varchar。
比较两种不同的数据类型时,根据MSDN,具有较低优先级的数据类型将转换为较高优先级。
在这种情况下,Varchar 转换为 int。
select cast('' AS int)
以上返回0。
因此
select 'weird' where 0 = 0
【讨论】: