Comment vérifier si le champ est nul ou vide dans MySQL?

88

J'essaye de comprendre comment vérifier si un champ est NULLou vide . J'ai ceci:

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

Je dois ajouter un chèque supplémentaire field1 != ""quelque chose comme:

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

Une idée comment y parvenir?

Veereev
la source

Réponses:

197

Soit utiliser

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

ou

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

Si vous souhaitez uniquement vérifier nullet non les chaînes vides, vous pouvez également utiliser ifnull()ou coalesce(field1, 'empty'). Mais cela ne convient pas aux chaînes vides.

juergen d
la source
13

Vous pouvez également utiliser CASEpour le même:

SELECT CASE WHEN field1 IS NULL OR field1 = '' 
       THEN 'empty' 
       ELSE field1 END AS field1
FROM tablename.
Himanshu Jansari
la source
10

Essayez d'utiliser nullif:

SELECT ifnull(nullif(field1,''),'empty') AS field1
  FROM tablename;
un homme d'une autre galaxie
la source
8

Vous pouvez utiliser la IFNULLfonction à l'intérieur du IF. Ce sera un peu plus court et il y aura moins de répétitions du nom du champ.

SELECT IF(IFNULL(field1, '') = '', 'empty', field1) AS field1 
FROM tablename
Gleb Kemarsky
la source
6

Vous pouvez créer une fonction pour rendre cela facile.

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

En utilisant:

SELECT IFEMPTY(field1, 'empty') as field1 
from tablename
palhares
la source
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
la source
ici, tout le monde peut y trouver la solution de qry. C'est un qry qui tourne et espère qu'il sera utile pour tout le monde
user7256715
-1

Si vous souhaitez enregistrer PHP, vous devez faire quelque chose comme:

$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!";
}
Adam Noor
la source
3
$isnull = (empty($ertom['YOUROWNAME']) ? empty : not empty); C'est un peu plus court ..
Robert de Jonge