¿Cómo recortar una cadena en SQL Server?

132

En SQL Server 2017, puede usar esta sintaxis, pero no en versiones anteriores:

SELECT Name = TRIM(Name) FROM dbo.Customer;
Eric Labashosky
fuente

Respuestas:

239
SELECT LTRIM(RTRIM(Names)) AS Names FROM Customer
Ben Hoffstein
fuente
3
esta es la forma más fácil de hacerlo, solo recuerde alias su columna que se devuelve
Miles
1
@Miles: agregué el alias para completar.
Ben Hoffstein
2
Entiendo que esta es la forma correcta de usar el recorte del valor. pero ¿puedes explicar por qué usar tanto LTRIM como RTRIM cuando podríamos haber usado solo TRIM en su lugar?
Code Buster
66
@CodeBuster: SQL Server no tiene definida la función TRIM, incluso en la versión 2014.
alextansc
77
SQL Server ahora tiene TRIM en la versión 2017. docs.microsoft.com/en-us/sql/t-sql/functions/trim-transact-sql
goodeye
64

Para recortar a la derecha, use:

SELECT RTRIM(Names) FROM Customer

Para recortar a la izquierda, use:

SELECT LTRIM(Names) FROM Customer

Para recortar en ambos lados, use:

SELECT LTRIM(RTRIM(Names)) FROM Customer
Kibbee
fuente
55
Por cierto, ¿qué posible razón podría tener Microsoft para incluir una función LTRIM y RTRIM sin un TRIM? Es peculiar.
Ben Hoffstein
Porque es redundante. Puede lograr lo mismo con LTRIM (RTRIM (var)).
Kibbee
52
Sí, pero son dos llamadas a funciones. Se podría decir que todos son redundantes ya que TSQL tiene CHARINDEX y SUBSTRING, pero esa es una forma idiota de verlo.
Ben Hoffstein
9
No es redundante en absoluto. No ofrecer una sola función llamada TRIM pone la carga de sintaxis en el usuario.
joelc
3
Probablemente fue un descuido, o una de esas características que se eliminó porque cada característica comienza en -100 puntos (lo que realmente lleva a conjuntos de características incoherentes en lugar de conjuntos de características priorizadas, en mi humilde opinión).
siride
7

Supongo que este es un ejercicio de limpieza de datos único. Una vez hecho esto, asegúrese de agregar restricciones de la base de datos para evitar datos incorrectos en el futuro, por ejemplo

ALTER TABLE Customer ADD
   CONSTRAINT customer_names__whitespace
      CHECK (
             Names NOT LIKE ' %'
             AND Names NOT LIKE '% '
             AND Names NOT LIKE '%  %'
            );

También considere no permitir otros caracteres (tabulación, retorno de carro, avance de línea, etc.) que pueden causar problemas.

También puede ser un buen momento para dividir esos nombres en family_name, first_name, etc :)

un día cuando
fuente
4
SELECT LTRIM(RTRIM(Replace(Replace(Replace(name,'   ',' '),CHAR(13), ' '),char(10), ' ')))
from author
razon
fuente
0

en sql server 2008 r2 con expresión ssis tenemos la función trim.

SQL Server Integration Services (SSIS) es un componente del software de base de datos Microsoft SQL Server que se puede usar para realizar una amplia gama de tareas de migración de datos.

puedes encontrar la descripción completa en este enlace

http://msdn.microsoft.com/en-us/library/ms139947.aspx

pero esta función tiene algunas limitaciones en sí mismas que también son mencionadas por msdn en esa página. pero esto está en el servidor sql 2008 r2

TRIM("   New York   ") .The return result is "New York".
rahularyansharma
fuente
3
Esto no tiene nada que ver con MS SQL, excepto que está en un producto incluido con la base de datos.
siride
-1

Versión extendida de "REPLACE":

REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(RTRIM(LTRIM(REPLACE("Put in your Field name", ' ',' '))),'''',''), CHAR(9), ''), CHAR(10), ''), CHAR(13), ''), CHAR(160), '') [CorrValue]
Kai-Ove Böhnisch
fuente