在MySQL,我可以选择列只存在的东西吗?
例如,我有以下查询:
select phone, phone2
from jewishyellow.users
where phone like '813%'
and phone2
我试图只选择电话以813开始的行,电话2有一些东西在里面。
在MySQL,我可以选择列只存在的东西吗?
例如,我有以下查询:
select phone, phone2
from jewishyellow.users
where phone like '813%'
and phone2
我试图只选择电话以813开始的行,电话2有一些东西在里面。
当前回答
如果phone2字段中有空格,则可以使用IFNULL和TRIM函数忽略这些记录:
SELECT phone, phone2
FROM jewishyellow.users
WHERE phone LIKE '813%'
AND TRIM(IFNULL(phone2,'')) <> '';
其他回答
我一直在用的一个对我很有效的答案是,我在这里没有看到(这个问题很老了,所以它可能没有起作用)
SELECT t.phone,
t.phone2
FROM jewishyellow.users t
WHERE t.phone LIKE '813%'
AND t.phone2 > ''
注意> "部分,它将检查值是否为空,以及值是否为空白或空白。
基本上,如果字段中有空白或NULL以外的内容,则为true。它也非常简短,所以很容易编写,与COALESCE()和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等),那么这将是完美的,只是要小心数字。
要检查字段是否为空,请使用is NULL, is NOT NULL操作符。
MySql参考http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html
你可以使用like操作符通配符来实现:
SELECT t.phone,
t.phone2
FROM jewishyellow.users t
WHERE t.phone LIKE '813%'
AND t.phone2 like '[0-9]';
通过这种方式,您可以获得所有具有数字前缀的phone2。
SELECT phone, phone2
FROM jewishyellow.users
WHERE phone like '813%' and (phone2 <> "");
可能需要一些调整,这取决于您的默认值是什么。如果你允许Null填充,那么你可以做“Not Null”代替,这显然更好。
检查NULL和空字符串值:
select phone
, phone2
from users
where phone like '813%'
and trim(coalesce(phone2, '')) <>''
注意:我认为COALESCE()是SQL标准(-ish),而ISNULL()不是。