Me gustaría reemplazar (o eliminar) un carácter de nueva línea en una cadena TSQL. ¿Algunas ideas?
Lo obvio
REPLACE(@string, CHAR(13), '')
simplemente no lo haré ...
En realidad, una nueva línea en un comando SQL o cadena de script puede ser cualquiera de CR, LF o CR + LF. Para obtenerlos todos, necesita algo como esto:
SELECT REPLACE(REPLACE(@str, CHAR(13), ''), CHAR(10), '')
.columns[0]
.fuente
Puede que llegue un año tarde a la fiesta, pero trabajo en consultas y MS-SQL todos los días, y me cansé de las funciones integradas LTRIM () y RTRIM () (y siempre tengo que llamarlas juntas), y de no capturar datos 'sucios' que tenían nuevas líneas al final, así que decidí que era hora de implementar una mejor función TRIM. Agradecería los comentarios de los compañeros!
Descargo de responsabilidad : esto en realidad elimina (reemplaza con un solo espacio en blanco) formas extendidas de espacio en blanco (tabulación, avance de línea, retorno de carro, etc.), por lo que ha sido renombrado como "CleanAndTrim" de mi respuesta original. La idea aquí es que su cadena no necesita caracteres de espacios en blanco especiales adicionales dentro de ella, por lo que si no aparecen en la cabeza / cola, deberían reemplazarse con un espacio simple. Si almacenó dichos caracteres a propósito en su cadena (por ejemplo, su columna de datos en la que está a punto de ejecutar esto), ¡NO LO HAGA! Mejore esta función o escriba la suya propia, que literalmente elimina esos caracteres de los puntos finales de la cadena, no del 'cuerpo'.
Bien, ahora que el descargo de responsabilidad está actualizado, aquí está el código.
¡Salud!
Otro descargo de responsabilidad : su salto de línea típico de Windows es CR + LF, por lo que si su cadena contiene esos, terminaría reemplazándolos con espacios "dobles".
ACTUALIZACIÓN, 2016 : ¡Una nueva versión que le da la opción de reemplazar esos caracteres de espacios en blanco especiales con otros caracteres de su elección! Esto también incluye comentarios y la solución alternativa para el emparejamiento de Windows CR + LF, es decir, reemplaza ese par de caracteres específico con una sola sustitución.
fuente
La nueva línea en T-SQL está representada por CHAR (13) y CHAR (10) (retorno de carro + avance de línea). En consecuencia, puede crear una instrucción REPLACE con el texto con el que desea reemplazar la nueva línea.
fuente
Para hacer lo que la mayoría de las personas desearía, cree un marcador de posición que no sea un carácter de salto de línea real. Entonces puedes combinar los enfoques para:
De esta manera, lo reemplaza solo una vez. El enfoque de:
Funciona muy bien si solo desea deshacerse de los caracteres CRLF, pero si desea un marcador de posición, como
o algo así, entonces el primer enfoque es un poco más preciso.
fuente
Si el tipo de datos de su columna es ' texto ', recibirá un mensaje de error como
En este caso, debe convertir el texto como nvarchar y luego reemplazar
fuente
Si tiene un problema en el que solo desea eliminar los caracteres finales , puede intentar esto:
Esto resolvió un problema que tenía con las direcciones donde un procedimiento creaba un campo con un número fijo de líneas, incluso si esas líneas estaban vacías. Para ahorrar espacio en mi informe SSRS, los reduje.
fuente
Si tiene un procedimiento abierto con el uso de sp_helptext, simplemente copie todo el texto en la nueva consulta sql y presione el botón ctrl + h, use la expresión regular para reemplazar y coloque ^ \ n en el campo de búsqueda reemplazar con espacio en blanco. para más detalles verifique la imagen. ingrese la descripción de la imagen aquí
fuente
Para la solución @Cerebrus: para H2 para cadenas "+" no es compatible. Entonces:
fuente
La respuesta publicada anteriormente / anteriormente que se informó que reemplaza CHAR (13) CHAR (10) retorno de carro:
Nunca llegará a la
REPLACE(MyField, CHAR(13) + CHAR(10), 'something else')
parte del código y devolverá el resultado no deseado de:Y NO el resultado deseado de un solo:
Eso requeriría que el script REPLACE se reescriba como tal:
Como el flujo prueba primero la primera instrucción REPLACE izquierda / más alejada, luego, si falla, continuará probando la siguiente instrucción REPLACE.
fuente