MySQL select where column is not empty

后端 未结 13 2123
深忆病人
深忆病人 2020-11-30 18:18

In MySQL, can I select columns only where something exists?

For example, I have the following query:

select phone, phone2
from jewishyellow.users
wh         


        
相关标签:
13条回答
  • 2020-11-30 18:29
    SELECT phone, phone2 
    FROM jewishyellow.users 
    WHERE phone like '813%' and (phone2 <> "");
    

    May need some tweakage depending on what your default value is. If you allowed Null fill, then you can do "Not NULL" instead, which is obviously better.

    0 讨论(0)
  • 2020-11-30 18:30

    you can use like operator wildcard to achieve this:

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

    in this way, you could get all phone2 that have a number prefix.

    0 讨论(0)
  • 2020-11-30 18:33

    Surprisingly(as nobody else mentioned it before) found that the condition below does the job:

    WHERE ORD(field_to_check) > 0 
    

    when we need to exclude both null and empty values. Is anybody aware of downsides of the approach?

    0 讨论(0)
  • 2020-11-30 18:33

    Use:

    SELECT t.phone, 
           t.phone2 
      FROM jewishyellow.users t
     WHERE t.phone LIKE '813%' 
       AND t.phone2 IS NOT NULL
    
    0 讨论(0)
  • 2020-11-30 18:34

    Check for NULL and empty string values:

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

    N.B. I think COALESCE() is SQL standard(-ish), whereas ISNULL() is not.

    0 讨论(0)
  • 2020-11-30 18:34

    An answer that I've been using that has been working for me quite well that I didn't already see here (this question is very old, so it may have not worked then) is actually

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

    Notice the > '' part, which will check if the value is not null, and if the value isn't just whitespace or blank.

    Basically, if the field has something in it other than whitespace or NULL, it is true. It's also super short, so it's easy to write, and another plus over the COALESCE() and IFNULL() functions is that this is index friendly, since you're not comparing the output of a function on a field to anything.

    Test cases:

    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 There is a caveat to this that I didn't expect, but numerical values that are zero or below are not greater than a blank string, so if you're dealing with numbers that can be zero or negative then DO NOT DO THIS, it bit me very recently and was very difficult to debug :(

    If you're using strings (char, varchar, text, etc.), then this will be perfectly be fine, just be careful with numerics.

    0 讨论(0)
提交回复
热议问题