2015-06-11 18 views
5

Ho dati in cui alcuni record contengono righe vuote (= senza spazio, no NULL). Ad esempio:Ignora SQL SOSTITUIRE per istruzione CASE

LOCALE 
en-es 
en-uk 

uk-uk 

Quando voglio selezionare quella riga vuota, è facile con:

SELECT LOCALE 
FROM ABC 
WHERE LOCALE = '' 

Ma quando provo a sostituirlo come segue, non funziona, il risultato è ancora riga vuota :

SELECT REPLACE(LOCALE,'','WHY') AS 'LOCALE' 
FROM ABC 
WHERE LOCALE = '' 

Ma se escludo questo con CASE affermazione, funziona:

SELECT CASE 
     WHEN LOCALE LIKE '' THEN 'WHY' 
     ELSE LOCALE 
     END AS 'LOCALE' 
FROM ABC 
WHERE LOCALE = '' 

Qual è il problema qui? Perché la funzione REPLACE non funziona?

+1

Non è possibile sostituire una stringa vuota. –

+0

@wewesthemenace Penso che l'OP abbia già ottenuto quella parte, la domanda è perché non può essere fatto ... –

+0

prova questo SELECT REPLACE ('', '', 'WHY') COME 'LOCALE' è lo spazio è lì allora puoi sostituirlo. empty sting you can not –

risposta

6

È ovvio che '' significa vuoto (non null) ed esiste anche tra due lettere consecutive. (Poiché è vuoto)

Quindi Sql non può continuare sostituendo che vuoto tra ogni lettera con la stringa desiderata. Ecco perché non è possibile sostituire ''

controllare questa query

SELECT ISNULL(NULLIF(LOCALE, ''),'WHY') AS [LOCALE] 
FROM ABC 
WHERE LOCALE = '' 
+0

Non è * impossibile *, è solo qualcosa che gli sviluppatori di SQL Server non hanno permesso ... –

+0

Accetto .. @ZoharPeled –

+0

Ho votato la tua risposta dato che sei l'unico che ha capito la domanda al momento :-) –

1

tuo sostituire funzione non sostituire spazio vuoto. Cercate di questo

SELECT REPLACE(isnull(ITEM,''),' ','WHY') AS 'LOCALE' 
FROM Table1 
WHERE ITEM = '' 
+0

non funzionerà se l'ELEMENTO è vuoto –

1

Questo è solo un metodo alternativo provare il metodo seguito

select COALESCE(NULLIF('',''), 'WHY' AS 'LOCALE' 
FROM ABC 
WHERE LOCALE = '' 
1

suggerisco per l'uso NULLIF per convertire stringa vuota a NULL, dopo che per utilizzare COALESCE (standard ANSI) per sostituire NULL per qualsiasi valore desiderato, nel modo seguente:

SELECT COALESCE(NULLIF(LOCALE, ''),'WHY') AS 'LOCALE' 
FROM ABC 
WHERE LOCALE = ''