MySQL选择列不为空的位置

mik*_*ike 176 mysql sql

在MySQL中,我可以仅在存在某些内容时选择列吗?

例如,我有以下查询:

select phone, phone2
from jewishyellow.users
where phone like '813%'
and phone2
Run Code Online (Sandbox Code Playgroud)

我正在尝试仅选择电话以813开头的行,而phone2中有一些内容.

Iva*_*uev 263

比较phone2空字符串的值:

select phone, phone2 
from jewishyellow.users 
where phone like '813%' and phone2<>''
Run Code Online (Sandbox Code Playgroud)

请注意,NULL值被解释为false.

  • @ivan:给我的消息,抱歉. (7认同)
  • 单引号,不是双引号. (5认同)
  • @OMG小马:但它适用于mysql.这是唯一的问题 (5认同)
  • &lt;&gt; 与 != 相同。这很简单。但我不知道:) (3认同)
  • `phone2 <>""`不会超过任何SQL语法检查程序. (2认同)

Sta*_*nov 46

要检查是否字段为空的使用IS NULL,IS NOT NULL运营商.

MySql参考http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html

  • OP只询问在phone2字段中有某些内容的行.IS NOT NULL返回字面上未设置为NULL的所有内容,即使是空字符串"".!=''或<>''正如Ivan在接受的答案中所说,不会返回空字符串或NULL值.换句话说,IS NOT NULL是!=''的子集,但它们不是等价的. (10认同)

dav*_*vek 32

检查NULL并清空字符串值:

select phone
, phone2 
from users 
where phone like '813%' 
and trim(coalesce(phone2, '')) <>''
Run Code Online (Sandbox Code Playgroud)

NB我认为COALESCE()是SQL标准(-ish),而ISNULL()则不是.

  • 你不需要使用trim函数,因为在MySQL中,任意数量的空格的字符串等于任意数量的空格的另一个字符串,我已经在回答中详细写了http://stackoverflow。 com/a/42723975/728236 (3认同)

Bri*_*ica 18

我一直在使用的答案一直很适合我,我还没有看到这里(这个问题已经很老了,所以它可能还没有工作)实际上是

SELECT t.phone, 
       t.phone2 
  FROM jewishyellow.users t
 WHERE t.phone LIKE '813%' 
   AND t.phone2 > ''
Run Code Online (Sandbox Code Playgroud)

注意该> ''部分,它将检查该值是否为null,以及该值是否只是空格或空白.

基本上,如果字段中除了空格之外还有其他内容NULL,那么它就是真的.这也是超级短线,所以很容易写,并通过另一个加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
Run Code Online (Sandbox Code Playgroud)

更新有一点需要注意,我没想到,但是零或以下的数值大于一个空字符串,所以如果你处理的数字可以是零或负数而不是那么做,它最近咬了我,很难调试:(

如果你正在使用字符串(char,varchar,text等),那么这将是完美的,只需要小心数字.


mic*_*man 16

如果phone2字段中存在来自意外数据输入的空格,则可以忽略具有IFNULL和TRIM功能的那些记录:

SELECT phone, phone2
FROM jewishyellow.users
WHERE phone LIKE '813%'
    AND TRIM(IFNULL(phone2,'')) <> '';
Run Code Online (Sandbox Code Playgroud)


小智 8

令人惊讶的是(正如之前没有人提到的那样)发现以下条件可以完成这项工作:

WHERE ORD(field_to_check) > 0 
Run Code Online (Sandbox Code Playgroud)

当我们需要排除 null 和空值时。有人知道这种方法的缺点吗?


Kla*_*sen 7

select phone, phone2 from jewishyellow.users 
where phone like '813%' and phone2 is not null
Run Code Online (Sandbox Code Playgroud)

  • 注意,'NULL`值和空字符串'''之间存在差异,其中**是**值.如果要检查空字符串,请使用其他答案建议的`column <>''. (6认同)

Sat*_*ppy 6

SELECT phone, phone2 
FROM jewishyellow.users 
WHERE phone like '813%' and (phone2 <> "");
Run Code Online (Sandbox Code Playgroud)

根据您的默认值,可能需要进行一些调整。如果允许Null填充,则可以改为执行“ Not NULL”,这显然更好。