Una query SQL che sostituisce i valori null.
Domanda
Ho bisogno di una query SQL che restituisca ContactDate, SortName, City, ContactType e Riepilogo dalle tabelle seguenti. Se un valore è nullo, ne ho bisogno per restituire il testo & # 8220; Nessuna voce & # 8221 ;.
ContactTable
- ContactID
- ContactDate
- UserID
- Riepilogo
- ContactType
- SortName
usertable
- UserID
- FirstName
- Cognome
- AddressID
AddressTable
- AddressID
- Città
- Via
- Stato
- Zip
Soluzione
SELECT COALESCE(CAST(CONVERT(VARCHAR(10), ContactTable.ContactDate, 101) AS VARCHAR(10)), 'No Entry') AS ContactDate,
COALESCE(ContactTable.SortName, 'No Entry') AS SortName,
COALESCE(AddressTable.City, 'No Entry') AS City,
COALESCE(ContactTable.ContactType, 'No Entry') AS ContactType
FROM ContactTable
LEFT OUTER JOIN UserTable ON ContactTable.UserID = UserTable.UserID
LEFT OUTER JOIN AddressTable ON UserTable.AddressID = AddressTable.AddressID
Qui è un grafico dei formati SQL DateTime per l'istruzione CONVERT sopra.
Altri suggerimenti
COALESCE () su qualsiasi piattaforma che valga il suo peso sotto sale.
Assicurati di gestire i problemi di trasmissione.
Ad esempio:
--(SQL Server)
SELECT
C.ContactID,
COALESCE(CAST(CONVERT(varchar(10), C.ContactDate, 101) AS varchar(10), 'No Entry') AS ContactDate,
COALESCE(SorName, 'No Entry') AS SortName
ecc. ecc.
SELECT
ISNULL(ContactDate, 'No Entry') AS ContactDate
FROM Table
L'uso di ISNULL è piuttosto semplice.
La versione Oracle di questa funzione si chiama nvl
. Stesso utilizzo - SELECT nvl (nome_colore, valore_colorato) DA foo
.
La versione più generale di questo è decode
, che ha tre parametri e consente di specificare per quale valore di colonna si desidera eseguire una sostituzione (in modo da poter sostituire tutto 'Johnny' con 'John "o qualcosa del genere).
L'uso di ' IIF ' è una soluzione di Access DB ma può funzionare in altri DB.
SELECT IIF(IsNull(Foo), 'No Entry' ,Foo), IIF(IsNull(Bar), 'No Entry' ,Bar) From TableName
La funzione IIF restituisce uno di 2 valori dipende dalla valutazione di un'espressione.
Sintassi SQL:
IIF (espressione, valore reale1, valore falso)
Puoi anche effettuare chiamate diverse per ogni colonna. Ci vorranno più chiamate individuali, ma potrebbe essere più veloce se non hai molte righe da aggiornare.
update ContactTable set ContactDate = 'No Entry' where ContactDate is null;
Ripeti per ogni colonna.