2010-02-06 14 views
191

In MS SQL-Server, non posso fare:Qual è l'equivalente di PostgreSQL per ISNULL()

SELECT ISNULL(Field,'Empty') from Table

Ma in PostgreSQL ricevo un errore di sintassi. Come si emula la funzionalità ISNULL()?

+1

No, non è possibile farlo in MSSQL. Quel codice non verrà compilato. 'ISNULL' prende due argomenti e restituisce il secondo è il primo è' null', altrimenti il ​​primo. – GSerg

+0

@GSerg, hai ragione. risolto quello. –

+0

Gserg e Byron sì, si può vedere qui Esempio dal mio PC SELEZIONA IsNull (a.FechaEntregada, '') come prova da dbo.Amonestacion un https://msdn.microsoft.com/en-us/ library/ms184325.aspx – Juan

risposta

338
SELECT CASE WHEN field IS NULL THEN 'Empty' ELSE field END AS field_alias 

O più idiomatica:

SELECT coalesce(field, 'Empty') AS field_alias 
+37

+1 per 'coalizione'. (P.S. Puoi farlo anche in MS SQL Server.) –

+1

Ci sono altri casi per usare IS NULL, quindi è bene sapere entrambi. –

+26

Penso che valga la pena notare che è 'coalesce' che è in standard SQL, con' isnull' che è una funzione specifica per MS che essenzialmente è 'coalesce' con solo due parametri. – GSerg

-7

Creare la seguente funzione

CREATE OR REPLACE FUNCTION isnull(text, text) RETURNS text AS 'SELECT (CASE (SELECT $1 " 
    "is null) WHEN true THEN $2 ELSE $1 END) AS RESULT' LANGUAGE 'sql' 

E che funzionerà.

È possibile creare versioni diverse con diversi tipi di parametri.

+24

Per favore, nessuno lo fa. Usa invece coalesce() in modo che il tuo DBA non ti odia. – Jordan

58

Uso COALESCE() invece:

SELECT COALESCE(Field,'Empty') from Table; 

Funziona molto simile ISNULL, anche se fornisce più funzionalità. Coalesce restituirà il primo valore non nullo nell'elenco. Così:

SELECT COALESCE(null, null, 5); 

restituisce 5, mentre

SELECT COALESCE(null, 2, 5); 

restituisce 2

Coalesce vorrà un gran numero di argomenti. Non c'è un massimo documentato. Ho testato 100 argomenti e ci sono riuscito. Questo dovrebbe essere abbastanza per la stragrande maggioranza delle situazioni.

16

Come si emula la funzionalità ISNULL()?

SELECT (Field IS NULL) FROM ... 
+4

Questo emula la funzionalità esatta di isnull, non è sicuro del motivo per cui è downvoted – smackshow

+3

@artur Non capisci come funziona nient'altro. – datashaman

+0

La migliore risposta per la domanda, ovviamente. Questa espressione è l'equivalente completo di ISNULL(). COALESCE() è molto intelligente e interessante da sapere ma non può eseguire un ISNULL() mentre è chiuso. – Skrol29

10

Prova:

SELECT COALESCE(NULLIF(field, ''), another_field) FROM table_name 
+1

Questo è bello in quanto copre il caso in cui un campo di testo NON è nullo, ma anche 'vuoto'. – soulia

Problemi correlati