Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Funções TRIM, LTRIM e RTRIM do SQL Server


A função TRIM do SQL Server foi projetada para remover espaços em branco à esquerda e à direita de uma cadeia de caracteres. Um espaço à esquerda é um espaço em branco que ocorre antes da string real. Um espaço à direita ocorre depois.

Neste artigo, vamos examinar a função TRIM e ilustrar seu uso com exemplos práticos. Então, vamos começar do básico.

Função TRIM no SQL Server


SQL TRIM é uma função interna que nos permite cortar os caracteres desnecessários em ambos os lados da string com uma ação. Mais frequentemente, nós o usamos para remover espaços em branco. Essa função apareceu no SQL Server 2017 e agora também está presente no Banco de Dados SQL do Azure.

A sintaxe da função SQL TRIM é a seguinte:

TRIM ( [ caracteres FROM ] string )
  • personagens DE é um opcional parâmetro que define quais caracteres devemos excluir. Por padrão, esse parâmetro se aplica a espaços em ambos os lados de nossa string.
  • cadeia é um obrigatório parâmetro que determina a string onde precisamos nos livrar de espaços/outros caracteres desnecessários.

A saída retornada é uma string sem os caracteres que determinamos serem cortados no início e no fim. Veja o exemplo:
SELECT TRIM( ' example ') AS Result;

A saída é:

exemplo

Como mencionamos, a função TRIM também pode remover outros caracteres. Dê uma olhada no exemplo em que queremos limpar a string de caracteres e espaços desnecessários:
SELECT TRIM( '.,# ' FROM '# ! example .') AS Result;

A saída é:

! exemplo

A função SQL TRIM está disponível no SQL Server a partir da versão 2017, mas era possível fazer a tarefa antes dessa versão também. Os usuários podem aplicar SQL LTRIM e SQL RTRIM funções. Eles estão presentes em todas as versões com suporte do SQL Server.

Função LTRIM no SQL Server


O SQL LTRIM função serve para remover espaços desnecessários no lado esquerdo da string. A sintaxe é a seguinte:

LTRIM(string)

sequência é o parâmetro obrigatório que especifica a sequência de caracteres de destino que precisamos cortar no lado esquerdo. A saída é uma cópia da string especificada, mas sem os espaços no início:
SELECT LTRIM('   SQL Function');

Saída:

'Função SQL'

Função RTRIM no SQL Server


O SQL RTRIM A função funciona da mesma forma que LTRIM – a diferença é que ela remove os espaços do lado direito da string. A sintaxe está abaixo:

RTRIM(string)

sequência é o parâmetro obrigatório que aponta para a string de caracteres onde precisamos remover os espaços à direita.
SELECT RTRIM('SQL Server   ');

Saída:

'SQL Server'

Usando LTRIM e RTRIM juntos


Trabalhando com o SQL Server, geralmente precisamos remover espaços apenas de um lado da string. Ainda assim, há casos em que precisamos limpar a corda em ambos os lados. A função TRIM que descrevemos anteriormente atende a esse objetivo, mas, como lembramos, ela está disponível apenas no SQL Server 2017 e superior.

Existe uma maneira de remover os espaços iniciais e finais de uma string sem a função TRIM? Sim. Podemos usar LTRIM e RTRIM juntos em uma consulta.

A sintaxe é:

LTRIM(RTRIM(string))

sequência define a sequência de caracteres de destino que queremos limpar de espaços desnecessários em ambos os lados. Observe também que podemos colocar LTRIM e RTRIM em qualquer ordem .
SELECT LTRIM(RTRIM('   SQL Server  '));

Saída:

'SQL Server'

Agora que esclarecemos a essência de todas essas funções SQL (TRIM, LTRIM e RTRIM), vamos nos aprofundar.

Por que os espaços em branco são importantes


Pode-se perguntar por que pode ser importante remover esses espaços. Em termos simples, é porque eles podem constituir um incômodo ao, por exemplo, comparar valores. O próprio espaço em branco é considerado parte de uma string se estiver lá, portanto, é melhor se preocupar com esses problemas.

Vamos examinar essas funções corretamente.

Primeiro, criamos uma tabela simples para os tipos de banco de dados executados em nossa empresa. Nossa tabela tem três colunas. A primeira é a coluna de ID necessária para identificar cada linha de forma exclusiva. O segundo é DBTypeNameA . O terceiro é o DBTypeNameB .

As duas últimas colunas diferem pelo tipo de dados. DBTypeNameA primeiro usa o VARCHAR tipo de dados e DBTypeNameB usa o CHAR tipo de dados.

Para ambas as colunas, alocamos o comprimento de dados de 50.
- Listing 1: Create a Simple Table
USE DB2
GO
CREATE TABLE DBType (
ID INT IDENTITY(1,1)
,DBTypeNameA VARCHAR (50)
,DBTypeNameB CHAR (50))

GO

Observe a diferença entre esses tipos de dados.
  • Para a coluna VARCHAR, o SQL Server não aloca o espaço para 50 caracteres que esperamos na coluna ab initio. Dizemos que a coluna deve prever um máximo de 50 caracteres, mas aloque espaço conforme necessário.
  • Para a coluna CHAR, essa provisão é feita para 50 caracteres cada vez que uma linha é inserida, independentemente de o valor real precisar ou não desse espaço.

Assim, usar VARCHAR (Variable Characters) é uma forma de economizar espaço.

Após criar a tabela, preenchemos a mesma usando o código da Listagem 2.
-- Listing 2: Populate the Table
USE DB2
GO
INSERT INTO DBType VALUES ('SQL Server','SQL Server');
INSERT INTO DBType VALUES (' SQL Server ',' SQL Server ');
INSERT INTO DBType VALUES ('  SQL Server  ','  SQL Server  ');
INSERT INTO DBType VALUES ('Oracle','Oracle');
INSERT INTO DBType VALUES (' Oracle ',' Oracle ');
INSERT INTO DBType VALUES ('  Oracle  ','  Oracle  ');
INSERT INTO DBType VALUES ('MySQL','MySQL');
INSERT INTO DBType VALUES (' MySQL ',' MySQL ');
INSERT INTO DBType VALUES ('  MySQL  ','  MySQL  ');

Ao preencher nossa tabela, inserimos deliberadamente valores com espaços à esquerda e à direita. Vamos usá-los em nossa demonstração.

Quando consultamos a tabela (consulte a Listagem 3), podemos ver a “distorção” nos dados conforme renderizados no SSMS (Figura 1).
-- Listing 3: Query the Table
USE DB2
GO
SELECT * FROM DBType;

Essa distorção é visível porque temos espaços à esquerda. Espaços à direita são mais difíceis de visualizar dessa maneira.

A consulta na Listagem 4 fornece uma visão mais profunda dessa “distorção”. Apresenta as funções LEN e DATALENGTH:
  • LEN() retorna o número de caracteres em uma string excluindo espaços à direita.
  • DATALENGTH() retorna o número de bytes usados ​​para representar uma expressão.
-- Listing 4: Query the Table
USE DB2
GO
SELECT DBTypeNameA
, LEN(DBTypeNameA) LenVarcharCol
, DATALENGTH(DBTypeNameA) DataLenVarcharCol
, DBTypeNameB
, LEN(DBTypeNameB) LenCharCol
, DATALENGTH(DBTypeNameB) DataLenCharCol
FROM DBType;

A Figura 2 mostra variações de comprimento para expressões como “SQL Server”, “Oracle” e “MySQL” devido aos espaços à esquerda e à direita.

Isso implica que essas expressões não são as mesmas no que diz respeito ao mecanismo de consulta do SQL Server. Podemos ver isso claramente executando o código na Listagem 5.
-- Listing 5: Query for Specific 
USE DB2
GO
SELECT * FROM DBType WHERE DBTypeNameA='SQL Server';
SELECT * FROM DBType WHERE DBTypeNameA='Oracle';
SELECT * FROM DBType WHERE DBTypeNameA='MySQL';

O DataLenCharCol O campo representa a saída da função DATALENGTH() na coluna CHAR. Portanto, uma consequência dessa disparidade entre “SQL Server” e “SQL Server” é o resultado da consulta exibido na Figura 3.

Vemos que, embora tenhamos três linhas com cada tipo de banco de dados, nossas consultas retornam apenas uma de cada porque os espaços à esquerda e à direita distinguem os valores.

Resolvendo o problema


Obter resultados corretos para a consulta na Listagem 5 é viável e fácil. Precisamos da função TRIM() do SQL Server, conforme mostrado na Listagem 6.
-- Listing 6: Query for Specific 
USE DB2
GO
SELECT * FROM DBType WHERE TRIM(DBTypeNameA)='SQL Server';
SELECT * FROM DBType WHERE TRIM(DBTypeNameA)='Oracle';
SELECT * FROM DBType WHERE TRIM(DBTypeNameA)='MySQL';

Sem esta função TRIM(), poderíamos obter resultados errados em alguns cenários.

Podemos levar isso adiante carregando dados em uma tabela separada, supondo que queríamos resolver o problema permanentemente (uma espécie de limpeza de dados).
-- Listing 7: Query for Specific 
USE DB2
GO
SELECT ID, TRIM(DBTypeNameA) DBTypeNameA, TRIM(DBTypeNameB) DBTypeNameB FROM DBType;

Compare os resultados da Listagem 7 (Figura 5) com os da Listagem 3 (Figura 1). Também podemos criar outra tabela com esse conjunto de resultados para limpar os dados (consulte a Listagem 8).
-- Listing 8: Create a New Table (Data Cleanup)
USE DB2
GO
SELECT ID, TRIM(DBTypeNameA) DBTypeNameA, TRIM(DBTypeNameB) DBTypeNameB INTO DBType_New FROM DBType;

SELECT * FROM DBType_New;

Dessa forma, podemos resolver nossos problemas de forma permanente e remover a sobrecarga de executar funções cada vez que precisarmos extrair dados de nossa tabela.

Conclusão


As funções TRIM() do SQL Server podem ser usadas para remover espaços iniciais e finais de strings. LTRIM e RTRIM são duas variantes desta função que se concentram em espaços à esquerda (LEFT) e à direita (RIGHT), respectivamente.

Podemos aplicar TRIM() dinamicamente para organizar o conjunto de resultados e garantir a obtenção do conjunto de resultados correto. Além disso, podemos usá-lo para remover espaços enquanto movemos os dados ordenadamente de uma tabela para outra.

Artigos relacionados


Como analisar strings como um profissional usando a função SQL SUBSTRING ()?