mySQL:为什么if(condition,then,'')!=''与if(condition,then,0)不一样!= 0

时间:2013-06-04 15:44:38

标签: mysql sql if-statement substring

我刚刚遇到了一些我在mySQL数据库上进行查询时无法解释的内容:

SELECT
if(LENGTH(partner_id) > 38, SUBSTRING(partner_id FROM 8), 0) as sub_id
from people
Where
if(LENGTH(partner_id) > 38, SUBSTRING(partner_id FROM 8), 0) != 0

到目前为止没什么特别的,我只想显示一些partner_ids的一部分。 但是,如果我做同样的声明略有不同(用空字符串''调出0):

SELECT
if(LENGTH(partner_id) > 38, SUBSTRING(partner_id FROM 8), '') as sub_id
from people
Where
if(LENGTH(partner_id) > 38, SUBSTRING(partner_id FROM 8), '') != ''

我得到更多结果。唯一区别:我在 else-statement 中放入一个空字符串,并比较空字符串。这是SUBSTRING函数的一些奇怪行为吗?或者我是否想念树木?

1 个答案:

答案 0 :(得分:1)

一种解释是你有一些伙伴ID,子字符串以0开头。

在第一种情况下,查询正在进行整数比较。像'0a'这样的字符串作为整数求值为“0”。这等于0,因此它们被过滤掉了。

在第二种情况下,查询正在进行字符串比较。像'0a'这样的字符串与''不同,所以这些字符串会传递过滤子句。