2009-08-24 12 views
5

J'ai deux chaînes SQL et la fonction REPLACE ne fonctionne que sur l'une d'entre elles, pourquoi?T-SQL, Supprimer l'espace dans la chaîne

Exemple 1:

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

Exemple 2:

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

exemple la sortie 1 est toujours "18 286,74", tandis que la sortie de l'exemple 2 est "zz". Pourquoi SQL ne réagit pas de la même manière aux deux chaînes?

MISE À JOUR:

Lors de l'exécution select replace('123 123.12', ' ', '') qui fonctionne très bien, pas encore avec '18 286,74.

+0

Cela fonctionne aussi sur le PC d'un collègue et nous en cours d'exécution des requêtes sur le même serveur de base de données – StevenMcD

+0

Cela fonctionne également dans SQL Server 2008. – Eric

Répondre

12

Testez-le de la façon suivante.

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

Si le code retourne 32 alors il est un espace, sinon, il est un caractère Unicode différent et votre remplacer « » ne fonctionnera pas.

+0

intéressant! Merci un million d'hommes! – StevenMcD

+4

Vous pouvez toujours faire REPLACE ('18 286,74' , CHAR (160), « ») dans le cas des espaces insécables – Jabezz

+0

@Jabezz Cette fonction de test unicode est vraiment cool! Était vraiment utile pour diagnostiquer mon personnage mystère :) – Shrout1

0

peut être coulé est nécessaire.

UPD: ou non (sur sql 2005 fonctionne très bien aussi)

+0

Jetant un varchar à un varchar, je doute, mais je vais essayer – StevenMcD

+0

Nope, utilisé à la fois CAST et CONVERT, ni le travail – StevenMcD

0

Etes-vous sûr qu'il est un espace? c'est-à-dire le même caractère que vous passez en second argument? Le code que vous avez posté fonctionne bien pour moi sur SQL Server 2008.

travaillez sur vos amis PC - peut-être les espaces blancs a normalisé quand vous l'avez envoyé à lui?

0

Vous utilisez probablement un espace insécable.

je pourrais le reproduire en tapant ALT+0160 dans le numéro dans SELECT REPLACE('18 286.74', ' ', '')

Pourriez-vous s'il vous plaît publier ce qui suit:

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

en copiant le '18 286.74' de REPLACE en CAST?

0

Je faisais la même question et a trouvé qu'il était un char (10) (saut de ligne). lorsqu'ils sont copiés sur Managment studio, il est devenu un char (32), mais dans le dossier, il a été un char (10) essayer

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