2013-06-21 19 views
9

Ho una colonna che può avere valori di o spazio vuoto (ad esempio ''). Vorrei sostituire entrambi i valori con un valore valido come 'UNKNOWN'. Le varie soluzioni che ho trovato suggeriscono di modificare il valore all'interno della tabella stessa. Tuttavia, questa non è un'opzione in questo caso in quanto il database è per un'applicazione di terze parti sviluppata e/o patchata molto male (in realtà penso che il mio Rottweiler avrebbe potuto fare un lavoro migliore). Sono preoccupato che la modifica dei dati sottostanti potrebbe far sì che l'applicazione si sciolga in un buco fumante.Sostituzione di NULL e stringa vuota all'interno dell'istruzione Select

ho tentato variazioni dei seguenti comandi:

COALESCE(Address.COUNTRY, 'United States') -- Won't replace empty string as it is not NULL 
REPLACE(Address.COUNTRY, '', 'United States') -- Doesn't replace empty string 
ISNULL(Address.COUNTRY, 'United States') -- Works for NULL but not empty string 

So che avrei potuto utilizzare l'istruzione CASE ma sono sperando c'è una soluzione molto più elegante/efficiente.

Dovrai fidarti di me quando dico che ho cercato una soluzione al mio problema specifico e non ho trovato una risposta. Se ho trascurato qualcosa, però, gentilmente mostrami il percorso illuminato.

risposta

46

Prova questa

COALESCE(NULLIF(Address.COUNTRY,''), 'United States') 
+1

Questo sembra averlo fatto. La birra è su di me. Tuttavia, sono sorpreso che funzioni in quanto la mia comprensione è che la funzione COALESCE catturerà il primo valore non nullo. Nella dichiarazione mi aspetterei che restituisca lo spazio vuoto in contrapposizione alla stringa di testo ??? Ma, in fondo, grazie per la soluzione. – mbadtk

+4

Ci sono due funzioni in questa istruzione, una 'NULLIF' che converte una stringa vuota in null e quindi' coalizione' che controlla null –

+0

@rs: Nota: 'nullif' non converte la stringa vuota in null, Restituisce null se due argomenti sono uguali;). –

5

Sembra che si desidera una vista invece di alterare i dati nella tabella.

Coalesce(NullIf(rtrim(Address.Country),''),'United States') 

Questo forzerà la colonna deve essere nullo se in realtà è una stringa vuota (o stringa vuota) e poi la si fondono avrà un nullo cui lavorare.

+1

Avere entrambi 'ltrim' e' rtrim' sembra inutile? Se è vuoto (eccetto spazi) è vuoto da entrambi i lati;) – Wolph

+1

@WoLpH aye, molto vero. Ho rimosso uno. (Immagino di aver appena scritto entrambi) – Brad

+1

Creare una vista non mi è passato per la testa anche se probabilmente avrebbe dovuto. rs e la tua variazione ha fornito una soluzione adeguata, quindi non c'è bisogno di vedere. – mbadtk

Problemi correlati