2013-02-05 11 views
6
SELECT * 
    FROM table WHERE id IN ('21') 
    AND (content_id IS NULL OR content_id = 0 OR content_id = '') 

Czy istnieje krótszy sposób zapisu tego warunku.mysql if not null, 0 lub ""

Mam kolumnę int(), która może być: NULL, 0 lub EMPTY.

+1

Nullable kolumna int może być int lub NULL - nie może być pusty ciąg znaków. –

+0

jest content_id kolumna int lub kolumna varchar? jeśli jest to kolumna typu int, nie ma potrzeby sprawdzania, czy content_id = "", więc myślę, że usunę moją odpowiedź :) – fthiella

Odpowiedz

7

Możesz użyć funkcji IFNULL w MySQL.

select ____ 
    from tbl 
where IFNULL(content_id, 0) = 0 
1

Można spróbować COALESCE:

SELECT * FROM table WHERE id IN ('21') 
AND COALESCE(content_id,0) =0; 
+0

Coalesce jest mobilne dla wszystkich platform RDBMS. Sprawdź tutaj, aby porównać funkcje [SQL ISNULL(), NVL(), IFNULL() i COALESCE()] (http://www.w3schools.com/sql/sql_isnull.asp) – bonCodigo

2

myślę krótsza droga jest taka:

SELECT * 
FROM table 
WHERE id IN ('21') 
     AND COALESCE(content_id IN ('0', ''), 1) 

content_id IN ('0', '') może przyjmować następujące wartości:

  • Prawdziwa jeśli conent_id jest albo '0' lub ''
  • Null jeśli conent_id IS Null
  • Fałsz inaczej.

Jeśli jest zerowy, z COALESCE wracam 1, co odpowiada wartości True.