Wie überprüfe ich, ob das Feld in MySQL null oder leer ist?

84

Ich versuche herauszufinden, wie ich überprüfen kann, ob ein Feld leerNULL oder leer ist . Ich habe das:

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

Ich muss einen zusätzlichen Scheck hinzufügen field1 != ""wie:

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

Irgendeine Idee, wie man das erreicht?

veereev
quelle

Antworten:

190

Entweder verwenden

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

oder

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

Wenn Sie nur nach nullund nicht nach leeren Zeichenfolgen suchen möchten, können Sie auch ifnull()oder verwenden coalesce(field1, 'empty'). Das ist aber nicht für leere Strings geeignet.

Jürgen d
quelle
13

Alternativ können Sie auch CASEfür dasselbe verwenden:

SELECT CASE WHEN field1 IS NULL OR field1 = '' 
       THEN 'empty' 
       ELSE field1 END AS field1
FROM tablename.
hims056
quelle
8

Sie können die IFNULLFunktion innerhalb der verwenden IF. Dies ist etwas kürzer und der Feldname wird weniger wiederholt.

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

Sie können eine Funktion erstellen, um dies zu vereinfachen.

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

Verwenden von:

SELECT IFEMPTY(field1, 'empty') as field1 
from tablename
Palhares
quelle
6

Versuchen Sie es mit nullif:

SELECT ifnull(nullif(field1,''),'empty') AS field1
  FROM tablename;
ein Mann aus einer anderen Galaxie
quelle
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
quelle
Hier kann jeder die Lösung von qry finden. Es ist ein laufendes qry und ich hoffe, es wird für alle nützlich sein
user7256715
-1

Wenn Sie PHP einchecken möchten, sollten Sie Folgendes tun:

$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
quelle
3
$isnull = (empty($ertom['YOUROWNAME']) ? empty : not empty); Das ist etwas kürzer ..
Robert de Jonge