0

在我的 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 语句中放了一个空字符串并比较空字符串。这是 SUBSTRING 函数的一些奇怪行为吗?还是我只见树木不见森林?

4

1 回答 1

1

一种解释是您有一些合作伙伴 ID,其中子字符串以0.

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

在第二种情况下,查询正在进行字符串比较。像 '0a' 这样的字符串与 '' 不同,因此它们通过了过滤子句。

于 2013-06-04T15:56:55.247 回答