2015-06-11 6 views
5

Ich habe Daten, wo einige Datensätze leere Zeilen enthalten (= kein Leerzeichen, keine NULL). ZB:SQL umgehen REPLACE von CASE-Anweisung

LOCALE 
en-es 
en-uk 

uk-uk 

Als ich diese leere Zeile auswählen möchten, ist es einfach, mit:

SELECT LOCALE 
FROM ABC 
WHERE LOCALE = '' 

Aber wenn ich versuche, es zu ersetzen, wie folgt, ist es nicht funktioniert, ist das Ergebnis immer noch leere Zeile :

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

Aber wenn ich dies mit CASE Aussage umgehen, funktioniert es:

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

Was ist das Problem hier? Warum funktioniert die REPLACE Funktion nicht?

+1

Sie können eine leere Zeichenfolge nicht ersetzen. –

+0

@wewesthemenace Ich denke, das OP hat schon diesen Teil, die Frage ist, warum es nicht getan werden kann ... –

+0

versuchen Sie diese SELECT REPLACE ('', '', 'WARUM') AS 'LOCALE' ist Raum ist dann da Sie können es ersetzen. leeres Stachel kann nicht –

Antwort

6

Es ist offensichtlich, dass '' bedeutet, leer (nicht null) und es besteht auch zwischen zwei aufeinander folgenden Buchstaben. (Wie es leer ist)

So Sql kann nicht weiter ersetzen , dass Leerzeichen zwischen jedem Buchstaben mit der Zeichenfolge Sie wollen. Deshalb sollten Sie nicht ''

prüfen diese Abfrage

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

Es ist nicht * unmöglich *, es ist nur etwas, das SQL Server-Entwickler nicht zulassen ... –

+0

Zustimmen .. @ZoharPeled –

+0

Ich habe Ihre Antwort gewählt, da Sie der einzige sind, der die Frage im Moment verstanden :-) –

1

Ihre Ersetzen-Funktion nicht ersetzen Leerzeichen ersetzen kann. Versuchen Sie, diese

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

wird es nicht funktionieren, wenn das ITEM leer ist –

1

Dies ist nur eine alternative Methode versuchen, die unter Methode

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

Ich schlage vor, Sie NULLIF zu verwenden, um leere Zeichenfolge NULL zu konvertieren, nachdem es zu verwenden COALESCE (ANSI-Standard), um NULL auf einen beliebigen Wert zu ersetzen, im Folgenden:

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