Как проверить, является ли поле пустым или пустым в MySQL?

88

Я пытаюсь понять, как проверить, пустое поле NULLили нет . У меня есть это:

SELECT IFNULL(field1, 'empty') as field1 from tablename

Мне нужно добавить дополнительную проверку, field1 != ""например:

SELECT IFNULL(field1, 'empty') OR field1 != ""  as field1 from tablename

Есть идеи, как этого добиться?

Веереев
источник

Ответы:

197

Либо используйте

SELECT IF(field1 IS NULL or field1 = '', 'empty', field1) as field1 
from tablename

или

SELECT case when field1 IS NULL or field1 = ''
            then 'empty'
            else field1
       end as field1 
from tablename

Если вы хотите только проверить, nullа не пустые строки, вы также можете использовать ifnull()или coalesce(field1, 'empty'). Но это не подходит для пустых строк.

Юрген Д.
источник
13

В качестве альтернативы вы также можете использовать CASEдля того же:

SELECT CASE WHEN field1 IS NULL OR field1 = '' 
       THEN 'empty' 
       ELSE field1 END AS field1
FROM tablename.
Химаншу Джансари
источник
10

Попробуйте использовать nullif:

SELECT ifnull(nullif(field1,''),'empty') AS field1
  FROM tablename;
человек из другой галактики
источник
8

Вы можете использовать в IFNULLфункции внутри IF. Это будет немного короче, и будет меньше повторений имени поля.

SELECT IF(IFNULL(field1, '') = '', 'empty', field1) AS field1 
FROM tablename
Глеб Кемарский
источник
6

Вы можете создать функцию, чтобы упростить эту задачу.

create function IFEMPTY(s text, defaultValue text)
returns text deterministic
return if(s is null or s = '', defaultValue, s);

С помощью:

SELECT IFEMPTY(field1, 'empty') as field1 
from tablename
Palhares
источник
0
SELECT * FROM ( 
    SELECT  2 AS RTYPE,V.ID AS VTYPE, DATE_FORMAT(ENTDT, ''%d-%m-%Y'')  AS ENTDT,V.NAME AS VOUCHERTYPE,VOUCHERNO,ROUND(IF((DR_CR)>0,(DR_CR),0),0) AS DR ,ROUND(IF((DR_CR)<0,(DR_CR)*-1,0),2) AS CR ,ROUND((dr_cr),2) AS BALAMT, IF(d.narr IS NULL OR d.narr='''',t.narration,d.narr) AS NARRATION 
    FROM trans_m AS t JOIN trans_dtl AS d ON(t.ID=d.TRANSID)
    JOIN acc_head L ON(D.ACC_ID=L.ID) 
    JOIN VOUCHERTYPE_M AS V ON(T.VOUCHERTYPE=V.ID)  
    WHERE T.CMPID=',COMPANYID,' AND  d.ACC_ID=',LEDGERID ,' AND t.entdt>=''',FROMDATE ,''' AND t.entdt<=''',TODATE ,''' ',VTYPE,'
    ORDER BY CAST(ENTDT AS DATE)) AS ta
user7256715
источник
здесь любой может найти решение qry. это работающий qry, и надеюсь, что он будет полезен для всех
user7256715 06
-1

Если вы хотите проверить PHP, сделайте что-нибудь вроде:

$query_s =mysql_query("SELECT YOURROWNAME from `YOURTABLENAME` where name = $name");
$ertom=mysql_fetch_array($query_s);
if ('' !== $ertom['YOURROWNAME']) {
  //do your action
  echo "It was filled";
} else { 
  echo "it was empty!";
}
Адам Нур
источник
3
$isnull = (empty($ertom['YOUROWNAME']) ? empty : not empty); Это немного короче ...
Роберт де Йонге