Answers:
比较phone2
空字符串的值:
select phone, phone2
from jewishyellow.users
where phone like '813%' and phone2<>''
请注意,NULL
值解释为false
。
phone2<>""
不会超过任何SQL语法检查器。
要检查是否字段为空的使用IS NULL
,IS NOT NULL
运营商。
MySql参考http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html
检查NULL
并清空字符串值:
select phone
, phone2
from users
where phone like '813%'
and trim(coalesce(phone2, '')) <>''
注意:我认为COALESCE()是SQL standard(-ish),而ISNULL()不是。
实际上,我一直在使用的一个答案对我来说一直很好,在这里我还没有看到(这个问题很老,所以那时可能没有用)
SELECT t.phone,
t.phone2
FROM jewishyellow.users t
WHERE t.phone LIKE '813%'
AND t.phone2 > ''
请注意该> ''
零件,它将检查值是否不为null,以及该值是否只是空白或空白。
基本上,如果该字段中包含空格或之外的其他内容NULL
,则为true。它也非常短,因此很容易编写,而COALESCE()
and IFNULL()
函数的另一个优点是它是索引友好的,因为您没有将字段上函数的输出与任何东西进行比较。
测试用例:
SELECT if(NULL > '','true','false');-- false
SELECT if('' > '','true','false');-- false
SELECT if(' ' > '','true','false');-- false
SELECT if('\n' > '','true','false');-- false
SELECT if('\t' > '','true','false');-- false
SELECT if('Yeet' > '','true','false');-- true
更新我对此没想到,但零或以下的数值不大于空白字符串,因此,如果要处理的数可以为零或负,则不要这样做,它最近咬了我,很难调试:(
如果您使用的是字符串(char,varchar,text等),那么这会很好,只需小心使用数字即可。
如果意外数据输入的phone2字段中有空格,则可以使用IFNULL和TRIM函数忽略这些记录:
SELECT phone, phone2
FROM jewishyellow.users
WHERE phone LIKE '813%'
AND TRIM(IFNULL(phone2,'')) <> '';
select phone, phone2 from jewishyellow.users
where phone like '813%' and phone2 is not null
NULL
值和一个空字符串''
这是一个值。如果要检查是否为空字符串,请column <> ''
按照其他答案的建议使用。
SELECT phone, phone2
FROM jewishyellow.users
WHERE phone like '813%' and (phone2 <> "");
根据您的默认值,可能需要进行一些调整。如果允许Null填充,则可以改为执行“ Not NULL”,这显然更好。
NOT()
MySQL中没有任何功能2)phone2=""
不会使其超出任何SQL语法检查器。
另一种选择是专门查看CHAR_LENGTH
列值的。(不要与混淆LENGTH
)
使用字符长度大于0的条件时,当列值可能为false时(例如,整数列的值为0
或),将避免误报NULL
。在各种数据类型上的表现更加一致。
这将导致任何值的长度至少为1个字符,否则为非空。
SELECT phone, phone2
FROM users
WHERE phone LIKE '813%'
AND CHAR_LENGTH(phone2) > 0
表数据
users
phone (varchar 12) | phone2 (int 10)
"813-123-4567" | NULL
"813-123-4567" | 1
"813-123-4567" | 0
users2
phone (varchar 12) | phone2 (varchar 12)
"813-123-4567" | NULL
"813-123-4567" | "1"
"813-123-4567" | "0"
"813-123-4567" | ""
CHAR_LENGTH(phone2) > 0
结果(相同)
users
813-123-4567 | 1
813-123-4567 | 0
users2
813-123-4567 | 1
813-123-4567 | 0
备择方案
phone2 <> ''
结果(不同)
users
813-123-4567 | 1
users2
813-123-4567 | 1
813-123-4567 | 0
phone2 > ''
结果 (不同)
users
813-123-4567 | 1
users2
813-123-4567 | 1
813-123-4567 | 0
COALESCE(phone2, '') <> ''
结果(相同)
注意:结果与phone2 IS NOT NULL AND phone2 <> ''
预期的结果有所不同
users
813-123-4567 | 1
813-123-4567 | 0
users2
813-123-4567 | 1
813-123-4567 | 0
phone2 IS NOT NULL AND phone2 <> ''
结果(不同)
users
813-123-4567 | 1
users2
813-123-4567 | 1
813-123-4567 | 0
在我的情况下,我有一个varchar列,IS NOT NULL
&的两种方法都!= ''
不起作用,但是以下方法对我有用。只是把这个放在这里。
SELECT * FROM `db_name` WHERE `column_name` LIKE '%*%'
phone2
包含某些内容”的含义?人们正在猜测您的意思phone2
是不是NOT NULL,不是空白,不是唯一的空格等