Làm thế nào để kiểm tra xem trường là null hay trống trong MySQL?


88

Tôi đang cố gắng tìm cách kiểm tra xem một trường có NULL hay trống . Tôi có cái này:

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

Tôi cần thêm một kiểm tra bổ sung field1 != ""như:

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

Bất kỳ ý tưởng làm thế nào để thực hiện điều này?

Câu trả lời:


197

Hoặc sử dụng

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

hoặc là

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

Nếu bạn chỉ muốn kiểm tra nullvà không tìm các chuỗi trống thì bạn cũng có thể sử dụng ifnull()hoặc coalesce(field1, 'empty'). Nhưng điều đó không phù hợp với chuỗi rỗng.


13

Ngoài ra, bạn cũng có thể sử dụng CASEcho cùng một:

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


8

Bạn có thể sử dụng các IFNULLchức năng bên trong IF. Điều này sẽ ngắn hơn một chút và sẽ có ít sự lặp lại của tên trường hơn.

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

6

Bạn có thể tạo một hàm để thực hiện việc này dễ dàng.

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

Sử dụng:

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

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

ở đây ai cũng có thể tìm solution.its có qry của một qry runing và hy vọng nó sẽ b hữu ích cho tất cả mọi người
user7256715

-1

Nếu bạn muốn kiểm tra PHP, thì bạn nên làm như sau:

$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!";
}

3
$isnull = (empty($ertom['YOUROWNAME']) ? empty : not empty); Đó là ngắn hơn một chút ..
Robert de Jonge
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.