Firebird Documentation IndexGuida sull'uso di NULL nel linguaggio SQL di Firebird → Convertire da e verso NULL
Firebird Home Firebird Home Indietro: Funzioni definite dall'utente (UDF)Firebird Documentation IndexRisali: Guida sull'uso di NULL nel linguaggio SQL di FirebirdAvanti: Modifica delle tabelle piene di dati

Convertire da e verso NULL

Sostituire NULL con un valore
Convertire valori a NULL

Sostituire NULL con un valore

La funzione COALESCE

In Firebird 1.5 e successivi c'è una funzione che è in grado di convertire NULL a quasi qualsiasi altra cosa. Questo permette di fare una conversione al volo e di usare il risultato per ulteriori elaborazioni, senza l'uso del costrutto «if (Espressione is null) then». Questa particolare funzione è la COALESCE e si usa in questo modo:

COALESCE( Espr1, Espr2, Espr3, ... )

COALESCE riporta il valore della prima espressione diversa da NULL della lista degli argomenti. Se tutte le espressioni sono NULL, la COALESCE riporta NULL.

Questo è il modo in cui per esempio si può usare COALESCE per ricostruire il nome completo di una persona a partire da nome, cognome e titolo, assumendo che talvolta il campo Titolo possa essere NULL:

select coalesce ( Titolo || ' ', '' )
       || Cognome 
       || ' ' || Nome
from Persone

Oppure, per creare un nominativo il più informale possibile a partire da una tabella che contenga anche i soprannomi, e assumendo che possano essere NULL sia i soprannomi che i nomi:

select coalesce (Soprannome, Nome, 'Sig./Sig.ra')
       || ' ' || Cognome
from AltrePersone

COALESCE può venire in aiuto solo in quelle situazioni in cui il valore NULL può essere gestito allo stesso modo degli altri valori permessi per il tipo di dato. Se NULL necessità di una gestione particolare, diversa da ogni altro valore, l'unica opzione è usare un costrutto con IF o con CASE.

Firebird 1.0: le funzioni *NVL

In Firebird 1.0 non c'è la funzione COALESCE. Tuttavia si possono usare quattro funzioni UDF che permettono una buona parte della sua funzionalità. Queste UDF risiedono nella libreria fbudf e sono precisamente:

  • iNVL, per argomenti interi

  • i64NVL, per argomenti bigint

  • dNVL, per argomenti in duplice precisione

  • sNVL, per le stringhe

Le funzioni *NVL hanno esattamente due argomenti. Come COALESCE, riportano il primo argomento se non è NULL; altrimenti, riportano il secondo. Notare che in Firebird 1.0 la libreria fbudf e pertanto le funzioni *NVL sono solo disponibili in ambiente Windows.

Convertire valori a NULL

Talvolta è utile avere certi valori a NULL in uscita, o cime valori intermedi. Non capita spesso, ma potrebe essere utile, per esempio, per escludere certi valori da una sommatoria o da una media. Le funzioni NULLIF possono fare questo, anche se per un valore alla volta.

Firebird 1.5 e successivi: la funzione NULLIF

La funzione interna NULLIF ha due argomenti: se sono uguali, la funzione riporta NULL. Altrimenti riporta il valore del primo argomento.

Un tipico esempio è

select avg( nullif( Peso, -1 ) ) from Ciccioni

che darà il peso medio della popolazione dei Ciccioni, senza contare quelli con peso -1, ricordando che le funzioni di aggregazione come AVG escludono dal conteggio tutti i campi a NULL.

Lavorando un po' su questo esempio, supponiamo che finora si fosse usato -1 per indicare «peso sconosciuto» perchè non sicuri sull'uso di NULL. Dopo aver letto questa guida, si sarà pratici abbastanza da dare il comando:

update Ciccioni set Peso = nullif( Peso, -1 )

A questo punto, finalmente i pesi sconosciuti saranno realmente sconosciuti.

Firebird 1.0: Le UDF *nullif UDF

Firebird 1.0.x non ha la funzione interna NULLIF. Al suo posto ha quattro funzioni UDF nella libreria fbudf per ottenere il medesimo obiettivo:

  • inullif, per argomenti interi

  • i64nullif, per argomenti bigint

  • dnullif, per argomenti in duplice precisione (double precision)

  • snullif, per argomenti stringhe

Notare che la libreria di Firebird 1.0 fbudf e quindi anche l'insieme di funzioni*nullif è disponibile solo in Windows.

Avvertimento

Le note di rilascio di Firebird 1 dicono che, a causa di una limitazione del sistema, queste UDF riportano un valore equivalente a zero se gli argomenti sono identici. Ciò è sbagliato: se gli argomenti hanno lo stesso valore, le funzioni riportano un vero e proprio NULL.

Notare che riportano NULL anche quando il primo valore è un valore vero e proprio ed il secondo argomento è NULL. Questo è un risoltato sbagliato: invece le funzioni interne NULLIF di Firebird 1.5 correttamente riportano il primo argomento.

Indietro: Funzioni definite dall'utente (UDF)Firebird Documentation IndexRisali: Guida sull'uso di NULL nel linguaggio SQL di FirebirdAvanti: Modifica delle tabelle piene di dati
Firebird Documentation IndexGuida sull'uso di NULL nel linguaggio SQL di Firebird → Convertire da e verso NULL