Jak sprawdzić, czy pole jest puste lub puste w MySQL?

88

Próbuję dowiedzieć się, jak sprawdzić, czy pole jest NULLczy puste . Mam to:

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

Muszę dodać dodatkowy czek field1 != ""coś takiego:

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

Masz jakiś pomysł, jak to osiągnąć?

veereev
źródło

Odpowiedzi:

197

Albo użyj

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

lub

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

Jeśli chcesz tylko sprawdzić, nullczy nie ma pustych ciągów, możesz również użyć ifnull()lub coalesce(field1, 'empty'). Ale to nie jest odpowiednie dla pustych łańcuchów.

juergen d
źródło
13

Alternatywnie możesz również użyć CASEdo tego samego:

SELECT CASE WHEN field1 IS NULL OR field1 = '' 
       THEN 'empty' 
       ELSE field1 END AS field1
FROM tablename.
Himanshu Jansari
źródło
10

Spróbuj użyć nullif:

SELECT ifnull(nullif(field1,''),'empty') AS field1
  FROM tablename;
człowiek z innej galaktyki
źródło
8

Można skorzystać z IFNULLfunkcji wewnątrz IF. Będzie to trochę krótsze i będzie mniej powtórzeń nazwy pola.

SELECT IF(IFNULL(field1, '') = '', 'empty', field1) AS field1 
FROM tablename
Gleb Kemarsky
źródło
6

Możesz utworzyć funkcję, aby to ułatwić.

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

Za pomocą:

SELECT IFEMPTY(field1, 'empty') as field1 
from tablename
palhares
źródło
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
źródło
tutaj każdy może znaleźć rozwiązanie
qry. to działające pytanie
-1

Jeśli chcesz sprawdzić w PHP, powinieneś zrobić coś takiego:

$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
źródło
3
$isnull = (empty($ertom['YOUROWNAME']) ? empty : not empty); To trochę krócej ...
Robert de Jonge,