Как проверить, является ли поле нулевым или пустым mysql?
Я пытаюсь выяснить, как проверить, является ли поле нулевым или пустым. у меня есть это
SELECT IFNULL(field1, 'empty') as field1 from tablename
Мне нужно добавить дополнительное field1 != ""
то вроде
SELECT IFNULL(field1, 'empty') OR field1 != "" as field1 from tablename
Любая идея, как это сделать?
Ответы
Ответ 1
Либо используйте
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')
. Но это не подходит для пустых строк.
Ответ 2
В качестве альтернативы вы также можете использовать CASE
для этого:
SELECT CASE WHEN field1 IS NULL OR field1 = ''
THEN 'empty'
ELSE field1 END AS field1
FROM tablename.
Ответ 3
Вы можете создать функцию, облегчающую ее выполнение.
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
Ответ 4
Вы можете использовать функцию IFNULL
внутри IF
. Это будет немного короче, и будет меньше повторений имени поля.
SELECT IF(IFNULL(field1, '') = '', 'empty', field1) AS field1
FROM tablename
Ответ 5
Если вы хотите проверить 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!";
}
Ответ 6
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