首页 文章

MySQL选择列不为空的位置

提问于
浏览
153

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

例如,我有以下查询:

select phone, phone2
from jewishyellow.users
where phone like '813%'
and phone2

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

10 回答

  • 30

    phone2 的值与空字符串进行比较:

    select phone, phone2 
    from jewishyellow.users 
    where phone like '813%' and phone2<>''
    

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

  • 15

    要检查字段是否为NULL,请使用 IS NULLIS NOT NULL 运算符 .

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

  • 1

    检查 NULL 并清空字符串值:

    select phone
    , phone2 
    from users 
    where phone like '813%' 
    and trim(coalesce(phone2, '')) <>''
    

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

  • 2

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

    SELECT phone, phone2
    FROM jewishyellow.users
    WHERE phone LIKE '813%'
        AND TRIM(IFNULL(phone2,'')) <> '';
    
  • 41

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

    SELECT t.phone, 
           t.phone2 
      FROM jewishyellow.users t
     WHERE t.phone LIKE '813%' 
       AND t.phone2 > ''
    

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

    基本上,如果字段中除了空格或 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
    

    UPDATE 有一点需要注意,我没想到,但零或以下的数值不大于一个空白字符串,所以 if you're dealing with numbers that can be zero or negative than DO NOT DO THIS ,它最近让我感到困扰并且很难调试:(

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

  • 4
    select phone, phone2 from jewishyellow.users 
    where phone like '813%' and phone2 is not null
    
  • 8
    SELECT phone, phone2 
    FROM jewishyellow.users 
    WHERE phone like '813%' and (phone2 <> "");
    

    可能需要一些调整,具体取决于您的默认值 . 如果你允许Null填充,那么你可以改为“Not NULL”,这显然更好 .

  • 0

    我们可以使用CASE将空值设置为某些char或String . 我使用NA作为默认字符串 .

    SELECT phone,   
    CASE WHEN phone2 = '' THEN 'NA' END AS phone2 ELSE ISNULL(phone2,0) 
    FROM jewishyellow.users  WHERE phone LIKE '813%'
    
  • 11

    使用:

    SELECT t.phone, 
           t.phone2 
      FROM jewishyellow.users t
     WHERE t.phone LIKE '813%' 
       AND t.phone2 IS NOT NULL
    
  • 228

    您可以使用like运算符通配符来实现此目的:

    SELECT t.phone, 
           t.phone2 
    FROM jewishyellow.users t
    WHERE t.phone LIKE '813%' 
      AND t.phone2 like '[0-9]';
    

    通过这种方式,您可以获得所有具有数字前缀的phone2 .

相关问题