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 NULLIS 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。