Como cortar uma string no SQL Server?

132

No SQL Server 2017, você pode usar esta sintaxe, mas não nas versões anteriores:

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

Respostas:

239
SELECT LTRIM(RTRIM(Names)) AS Names FROM Customer
Ben Hoffstein
fonte
3
esta é a maneira mais fácil de fazê-lo, lembre-se de apelido sua coluna que estão sendo devolvidos
Miles
1
@ Miles - eu adicionei o alias de integridade.
Ben Hoffstein
2
Entendo que esta é a maneira correta de usar o corte do valor. mas você pode explicar por que usar LTRIM e RTRIM quando poderíamos usar apenas TRIM?
Code Buster
6
@ CodeBuster: o SQL Server não possui a função TRIM definida, mesmo na versão 2014.
Alexansc
7
O SQL Server agora possui o TRIM na versão 2017. docs.microsoft.com/en-us/sql/t-sql/functions/trim-transact-sql
goodeye
64

Para aparar à direita, use:

SELECT RTRIM(Names) FROM Customer

Para aparar à esquerda, use:

SELECT LTRIM(Names) FROM Customer

Para aparar nos dois lados, use:

SELECT LTRIM(RTRIM(Names)) FROM Customer
Kibbee
fonte
5
Aliás, que possível motivo a Microsoft poderia incluir para incluir uma função LTRIM e RTRIM sem um TRIM? Isso é peculiar.
Ben Hoffstein
Porque é redundante. Você pode realizar o mesmo com LTRIM (RTRIM (var)).
Kibbee
52
Sim, mas são duas chamadas de função. Você pode dizer que todos são redundantes, uma vez que o TSQL possui CHARINDEX e SUBSTRING, mas essa é uma maneira idiota de ver isso.
Ben Hoffstein
9
Não é redundante. Não oferecer uma única função chamada TRIM coloca a carga de sintaxe no usuário.
Joelc
3
Provavelmente foi um descuido ou um desses recursos que foram cortados porque todos os recursos começam em -100 pontos (o que realmente leva a conjuntos de recursos incoerentes em vez de conjuntos de recursos priorizados, IMHO).
siride
7

Suponho que este é um exercício único de limpeza de dados. Uma vez feito, certifique-se de adicionar restrições ao banco de dados para evitar dados incorretos no futuro, por exemplo

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

Considere também não permitir outros caracteres (tabulação, retorno de carro, avanço de linha etc.) que possam causar problemas.

Ele também pode ser um bom momento para dividir esses nomes em family_name, first_name, etc :)

um dia quando
fonte
4
SELECT LTRIM(RTRIM(Replace(Replace(Replace(name,'   ',' '),CHAR(13), ' '),char(10), ' ')))
from author
navalha
fonte
0

no sql server 2008 r2 com expressão ssis, temos a função trim.

O SQL Server Integration Services (SSIS) é um componente do software de banco de dados do Microsoft SQL Server que pode ser usado para executar uma ampla variedade de tarefas de migração de dados.

você pode encontrar a descrição completa neste link

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

mas essa função possui algumas limitações, também mencionadas pelo msdn nessa página. mas isso é no sql server 2008 r2

TRIM("   New York   ") .The return result is "New York".
rahularyansharma
fonte
3
Isso não tem nada a ver com o MS SQL, exceto que ele está em um produto fornecido com o banco de dados.
siride
-1

Versão ampliada do "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
fonte