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


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

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

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

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

есть идеи, как это сделать?

6 58

6 ответов:

использовать

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'). Но это не подходит для пустых строк.

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

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

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

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

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

SELECT IF(IFNULL(field1, '') = '', 'empty', field1) AS field1 
FROM tablename

Если вы хотите проверить 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!";
}
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