2009-08-24 30 views
5

Tengo dos cadenas en SQL y la función SUSTITUIR solo funciona en una de ellas, ¿por qué?T-SQL, Eliminar espacio en la cadena

Ejemplo 1:

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

Ejemplo 2:

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

Ejemplo de salida de 1 sigue siendo "18 286.74", mientras que la salida del Ejemplo 2 es "zz". ¿Por qué SQL no reacciona de la misma manera a ambas cadenas?

ACTUALIZACIÓN:

Cuando se ejecuta select replace('123 123.12', ' ', '') que funciona bien, todavía no con '18 286.74' .

+0

Esto también está trabajando en la PC de un colega y la ejecución de los consultas en el mismo servidor de base de datos – StevenMcD

+0

Esto también funciona en SQL Server 2008. – Eric

Respuesta

12

Pruébelo de la siguiente manera.

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

Si el código devuelve 32, entonces es un espacio, si no, es un carácter Unicode diferente y su sustitución '' no va a funcionar.

+0

¡Interesante! ¡Gracias a un millón de hombres! – StevenMcD

+4

Siempre puede hacer REEMPLAZAR ('18 286.74 ', CHAR (160),' ') en el caso de espacios sin interrupciones – Jabezz

+0

@Jabezz ¡Esta función de prueba Unicode es realmente genial! Fue realmente útil para diagnosticar mi personaje misterioso :) – Shrout1

0

tal vez se necesita moldear.

UPD: o no (en SQL 2005 funciona muy bien también)

+0

Lanzando un varchar a un varchar, lo dudo pero lo intentaré – StevenMcD

+0

No, usado tanto un CAST como un CONVERT, ninguno funciona – StevenMcD

0

¿Seguro que es un espacio? es decir, el mismo espacio en blanco que está pasando como segundo argumento? El código que ha publicado funciona bien para mí en SQL Server 2008.

¿Está trabajando en su PC de amigos? ¿Quizás el espacio en blanco se normalizó cuando se lo envió?

0

Probablemente esté utilizando un espacio no rompible.

pude reproducirlo escribiendo ALT+0160 en el número de SELECT REPLACE('18 286.74', ' ', '')

Podría por favor emitir este siguiente:

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

copiando el '18 286.74' de REPLACE en CAST?

0

Estaba teniendo el mismo problema y encontré que era un char (10) (línea de alimentación). cuando se copia de Gestión estudio se convirtió en un char (32), pero en el registro que era un char (10) Proveedores

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