Necesito asegurarme de que un campo determinado no tenga más de un espacio (no me preocupan todos los espacios en blanco, solo el espacio) entre caracteres.
Entonces
'single spaces only'
necesita ser convertido en
'single spaces only'
Lo siguiente no funcionará
select replace('single spaces only',' ',' ')
ya que resultaría en
'single spaces only'
Realmente preferiría seguir con T-SQL nativo en lugar de una solución basada en CLR.
Pensamientos
sql-server
tsql
Christoph
fuente
fuente
Respuestas:
Aún más ordenado:
Salida:
fuente
Esto funcionaría:
fuente
"release < now"
entonces obtendrá"release<><><<><>now"
,"release<<>now"
,"release< now"
, es el mismo con cualquier par de símbolos, si usted tiene un solo uno de los dos entonces va a moverSi sabe que no habrá más de un cierto número de espacios en una fila, puede simplemente anidar el reemplazo:
4 reemplazos deben fijar hasta 16 espacios consecutivos (16, luego 8, luego 4, luego 2, luego 1)
Si pudiera ser significativamente más largo, entonces tendría que hacer algo como una función en línea:
Entonces solo hazlo
fuente
Reemplazar funcionará en todos los espacios dobles, no es necesario colocar múltiples reemplazos. Esta es la solución basada en conjuntos.
fuente
Se puede hacer de forma recursiva a través de la función:
entonces, por ejemplo:
devoluciones:
O la solución basada en el método descrito por @ agdk26 o @Neil Knight (pero más seguro)
ambos ejemplos devuelven el resultado anterior:
o
Cómo funciona:
Precaución: El carácter
/ cadena utilizado para reemplazar espacios no debe existir al principio o al final de la cadena y ser independiente.
fuente
Esto es algo de fuerza bruta, pero funcionará
fuente
Aquí hay una función simple que creé para limpiar cualquier espacio antes o después, y múltiples espacios dentro de una cadena. Maneja con gracia hasta 108 espacios en un solo tramo y tantos bloques como haya en la cuerda. Puede aumentar eso en factores de 8 agregando líneas adicionales con espacios más grandes si es necesario. Parece funcionar rápidamente y no ha causado ningún problema a pesar de su uso generalizado en una gran aplicación.
fuente
Encontré esto mientras buscaba una respuesta:
La respuesta completa (con la explicación) se obtuvo de: http://techtipsbysatish.blogspot.com/2010/08/sql-server-replace-multiple-spaces-with.html
En un segundo vistazo, parece ser solo una versión ligeramente diferente de la respuesta seleccionada.
fuente
Método 1
El primer método es reemplazar espacios adicionales entre palabras con una combinación de símbolos poco común como marcador temporal. Luego, puede reemplazar los símbolos de marcadores temporales utilizando la función de reemplazo en lugar de un bucle.
Aquí hay un ejemplo de código que reemplaza el texto dentro de una variable de cadena.
Prueba de tiempo de ejecución n. ° 1: en diez ejecuciones de este método de reemplazo, el tiempo de espera promedio en las respuestas del servidor fue de 1.7 milisegundos y el tiempo total de ejecución fue de 4.6 milisegundos. Prueba de tiempo de ejecución n. ° 2: el tiempo medio de espera en las respuestas del servidor fue de 1,7 milisegundos y el tiempo total de ejecución fue de 3,7 milisegundos.
Método # 2
El segundo método no es tan elegante como el primero, pero también hace el trabajo. Este método funciona anidando cuatro (u opcionalmente más) declaraciones de reemplazo que reemplazan dos espacios en blanco con un espacio en blanco.
Prueba de tiempo de ejecución n. ° 1: en diez ejecuciones de este método de reemplazo, el tiempo de espera promedio en las respuestas del servidor fue de 1.9 milisegundos y el tiempo de ejecución total fue de 3.8 milisegundos. Prueba de tiempo de ejecución n. ° 2: el tiempo medio de espera en las respuestas del servidor fue de 1,8 milisegundos y el tiempo total de ejecución fue de 4,8 milisegundos.
Método # 3
El tercer método para reemplazar espacios adicionales entre palabras es usar un bucle simple. Puede verificar los espacios adicionales en un ciclo while y luego usar la función de reemplazo para reducir los espacios adicionales con cada iteración del ciclo.
Prueba de tiempo de ejecución n. ° 1: en diez ejecuciones de este método de reemplazo, el tiempo de espera promedio en las respuestas del servidor fue de 1.8 milisegundos y el tiempo total de ejecución fue de 3.4 milisegundos. Prueba de tiempo de ejecución n. ° 2: el tiempo medio de espera en las respuestas del servidor fue de 1,9 milisegundos y el tiempo total de ejecución fue de 2,8 milisegundos.
fuente
Esta es la solución a través de reemplazo múltiple, que funciona para cualquier cadena (no necesita caracteres especiales, que no forman parte de la cadena).
fuente
Utilizo la solución FOR XML PATH para reemplazar múltiples espacios en un solo espacio
La idea es reemplazar espacios con etiquetas XML Luego dividir la cadena XML en fragmentos de cadena sin etiquetas XML Finalmente, concatenar esos valores de cadena agregando caracteres de un solo espacio entre dos
Así es como se puede llamar a la función UDF final
fuente
fuente
Normalmente uso este enfoque:
fuente
Solo agregando otro método
Reemplazo de múltiples espacios con un solo espacio SIN usar REPLACE en SQL Server-
fuente
Por favor, busque el siguiente código
Esto funcionó para mí .. Espero que esto ayude ...
fuente
Puedes probar esto:
fuente
Prueba esto..
fuente