MySQLselect哪个列不是空的
在MySQL中,我可以select列只存在的东西?
例如,我有以下查询:
select phone, phone2 from jewishyellow.users where phone like '813%' and phone2
我试图select只有手机开始与813和phone2有东西的行。
将phone2
值与空string进行比较:
select phone, phone2 from jewishyellow.users where phone like '813%' and phone2<>''
请注意, NULL
值被解释为false
。
要检查字段是否为NULL,请使用IS NULL
, IS NOT NULL
运算符。
MySql参考http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html
检查NULL
和空string值:
select phone , phone2 from users where phone like '813%' and trim(coalesce(phone2, '')) <>''
NB我认为COALESCE()是SQL标准(-ish),而ISNULL()不是。
如果phone2字段中有无意数据input的空格,则可以使用IFNULL和TRIMfunction忽略这些logging:
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
我一直在使用的一个答案已经为我工作得非常好,我没有在这里看到(这个问题是非常古老的,所以它可能没有奏效)实际上
SELECT t.phone, t.phone2 FROM jewishyellow.users t WHERE t.phone LIKE '813%' AND t.phone2 > ''
注意> ''
部分,它将检查该值是否为空,如果该值不只是空格或空白。
基本上,如果该字段除了空格或NULL
以外还有其他的东西,这是真的。 它也是超短的,所以写起来很容易,另外一个优于COALESCE()
和IFNULL()
函数是因为你没有把字段上的函数的输出与任何东西进行比较,所以这是索引友好的。
testing用例:
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
SELECT phone, phone2 FROM jewishyellow.users WHERE phone like '813%' and (phone2 <> "");
可能需要一些调整,取决于你的默认值是什么。 如果你允许空填充,那么你可以做“不空”,这显然是更好的。
我们可以使用CASE来设置一些字符或string的空白值。 我使用NA作为默认string。
SELECT phone, CASE WHEN phone2 = '' THEN 'NA' END AS phone2 ELSE ISNULL(phone2,0) FROM jewishyellow.users WHERE phone LIKE '813%'
使用:
SELECT t.phone, t.phone2 FROM jewishyellow.users t WHERE t.phone LIKE '813%' AND t.phone2 IS NOT NULL
你可以使用像运算符通配符来实现这一点:
SELECT t.phone, t.phone2 FROM jewishyellow.users t WHERE t.phone LIKE '813%' AND t.phone2 like '[0-9]';
通过这种方式,您可以获得所有具有号码前缀的phone2。