2009-08-24 5 views
5

Ich habe zwei Strings in SQL und die REPLACE-Funktion funktioniert nur auf einer von ihnen, warum ist das?T-SQL, Leerzeichen in Zeichenfolge entfernen

Beispiel 1:

SELECT REPLACE('18 286.74', ' ', '') 

Beispiel 2:

SELECT REPLACE('z z', ' ', '') 

Beispiel 1 der Ausgang "18 286,74" still ist, während Beispiel 2 die Ausgabe "zz" ist. Warum reagiert SQL nicht auf beide Zeichenfolgen?

UPDATE:

Wenn select replace('123 123.12', ' ', '') ausgeführt wird, funktioniert gut, noch nicht mit '18 286,74' .

+0

Dies arbeitet auch an einem PC Kollegen und wir die Abfragen für die gleichen Datenbankserver ausgeführt – StevenMcD

+0

Dies funktioniert auch in SQL Server 2008. – Eric

Antwort

12

Testen Sie es auf die folgende Weise.

select unicode(substring('18 286.74', 3, 1)) 

Wenn der Code gibt 32 dann ist es ein Raum, wenn nicht, es ist eine andere Unicode-Zeichen und Ihre ersetzen ‚‘ wird nicht funktionieren.

+0

interessant! Danke eine Million Mann! – StevenMcD

+4

Sie können immer ERSETZEN ('18 286.74 ', CHAR (160),' ') im Fall von nicht-brechenden Leerzeichen – Jabezz

+0

@Jabezz Diese Unicode-Test-Funktion ist wirklich cool! War wirklich hilfreich bei der Diagnose meines mysteriösen Charakters :) – Shrout1

0

vielleicht ist eine Besetzung erforderlich.

UPD: oder nicht (auf SQL 2005 funktioniert auch in Ordnung)

+0

Casting ein varchar zu einem varchar, ich bezweifle es, aber ich werde es versuchen – StevenMcD

+0

Nein, verwendet ein CAST und ein CONVERT, funktionieren beide – StevenMcD

0

Sind Sie sicher, dass es ein Raum ist? d. h. das gleiche Whitespace-Zeichen, das Sie als zweites Argument übergeben? Der Code, den Sie gepostet haben, funktioniert für mich in SQL Server 2008 einwandfrei.

Re arbeiten an Ihrem PC Freunde - vielleicht die Whitespace wurde normalisiert, wenn Sie es an ihn gesendet?

0

Sie verwenden wahrscheinlich nicht brechbaren Speicherplatz.

Ich konnte es reproduzieren, indem ALT+0160 in die Zahl in SELECT REPLACE('18 286.74', ' ', '')

eingeben

Könnten Sie das bitte folgende Ausgabe:

SELECT CAST('18 286.74' AS BINARY), REPLACE('18 286.74', ' ', '') 

durch die '18 286.74' von REPLACE in CAST kopieren?

0

Ich hatte das gleiche Problem und festgestellt, dass es ein Char (10) (Zeilenvorschub) war. wenn aus Managment Studio kopiert wurde es ein char (32), aber in der Aufzeichnung war es ein char (10) versucht

Select Replace(@string, char(13), '')