2012-11-12 11 views
21

nella query MySQL se mi passate:Caso MYSQL in Select per il controllo nullo

case guides.Gud_Publish_Date 
    when null then "Unscheduled" 
    else "Forth Coming Titles" 
    end 

allora sta prendendo in considerazione tutto è nullo anche il Gud_Publish_Date ha anche un valore. l'intera istruzione SQL è

SELECT guides.Gud_Id 
    , guides.Gud_Image 
    , guides.Gud_SubEditor 
    , guides.Gud_Reprint_Status 
    , guides.Gud_Publish_Date 
    , guides.Gud_Img_Chk 
    , guides.Gud_Published 
    , guides.Gud_View 
    , (
     CASE guides.Gud_Publish_Date 
      WHEN NULL 
       THEN "Unscheduled" 
      ELSE "Forth Coming Titles" 
      END 
     ) AS Schedules 
FROM guides 

Qualcuno può aiutarmi? Grazie in anticipo

+2

banale, ma credo che sia imminente una parola. – marvin

+0

possibile duplicato di [condizionale NOT NULL caso SQL] (http://stackoverflow.com/questions/4821031/conditional-not-null-case-sql) – nawfal

risposta

44

provare a utilizzare IF

SELECT guides.Gud_Id 
    , guides.Gud_Image 
    , guides.Gud_SubEditor 
    , guides.Gud_Reprint_Status 
    , guides.Gud_Publish_Date 
    , guides.Gud_Img_Chk 
    , guides.Gud_Published 
    , guides.Gud_View 
    , IF(guides.Gud_Publish_Date IS NULL,'Unscheduled','Forth Coming Titles') 
      AS Schedules 
FROM guides 

o se si vuole veramente CASE

SELECT guides.Gud_Id 
    , guides.Gud_Image 
    , guides.Gud_SubEditor 
    , guides.Gud_Reprint_Status 
    , guides.Gud_Publish_Date 
    , guides.Gud_Img_Chk 
    , guides.Gud_Published 
    , guides.Gud_View 
    , (
     CASE 
      WHEN guides.Gud_Publish_Date IS NULL 
      THEN 'Unscheduled' 
      ELSE 'Forth Coming Titles' 
     END 
    ) AS Schedules 
FROM guides 
+0

mostrando errore /* Errore SQL (1064): Hai un errore nella tua sintassi SQL; controlla il manuale che corrisponde alla tua versione del server MySQL per la sintassi corretta da usare vicino a 'guides.Gud_Publish_Date IS NULL, "Unscheduled", "Forth Coming Titles") come Schedule' alla riga 3 */ Tuttavia, la dichiarazione case funziona . Grazie per il tuo aiuto – user1023242

+0

stai davvero usando 'mysql'? : D perché i codici che ho fornito funzionano tutti. –

+0

[dichiarazioni Inline IF e CASE in MySQL: * clicca qui *] (http://timmurphy.org/2009/08/13/inline-if-and-case-statements-in-mysql/) –

2
SELECT guides.Gud_Id 
    , guides.Gud_Image 
    , guides.Gud_SubEditor 
    , guides.Gud_Reprint_Status 
    , guides.Gud_Publish_Date 
    , guides.Gud_Img_Chk 
    , guides.Gud_Published 
    , guides.Gud_View 
    , (
     CASE WHEN guides.Gud_Publish_Date IS NULL 
      THEN "Unscheduled" 
      ELSE "Forth Coming Titles" 
      END 
     ) AS Schedules 
FROM guides 
-2

Prova questo

SELECT guides.Gud_Id 
    , guides.Gud_Image 
    , guides.Gud_SubEditor 
    , guides.Gud_Reprint_Status 
    , guides.Gud_Publish_Date 
    , guides.Gud_Img_Chk 
    , guides.Gud_Published 
    , guides.Gud_View 
    , coalesce((
     CASE guides.Gud_Publish_Date 
      WHEN NULL 
       THEN 'Unscheduled' 
      ELSE 'Forth Coming Titles' 
      END 
     ), 'Unscheduled') AS Schedules 
FROM guides 
+1

Questo non funzionerà. Quando NULL, l'espressione CASE manca la voce e restituisce "Forth Coming Titles"; poiché non è NULL, il COALESCE restituisce lo stesso. – Diego

5

Ho trovato questa coppia di -a mesi post vecchi. Utilizzando COALESCE opzione come previsto dal Rajan, si può fare,

SELECT guides.Gud_Id 
    , guides.Gud_Image 
    , guides.Gud_SubEditor 
    , guides.Gud_Reprint_Status 
    , guides.Gud_Publish_Date 
    , guides.Gud_Img_Chk 
    , guides.Gud_Published 
    , guides.Gud_View 
    , CASE COALESCE(guides.Gud_Publish_Date, 0) 
      WHEN 0 THEN 'Unscheduled' 
       ELSE 'Forth Coming Titles' 
      END AS Schedules 
FROM guides 

Il codice di cui sopra assume che guides.Gud_Publish_Date non può assumere il valore 0, che posso fare perché è una data. Se così non fosse, puoi cambiare 0 per un altro valore che non può assumere; forse il tuo float preferito come 3.1415 o un identificativo nullo 'null'.

+0

Pulito, sicuro e intuitivo da leggere. ++ – SteveCinq