Manipulando Strings no SQL Server: Funções, Tipos de Dados e Dicas Avançadas

Manipular strings no SQL Server é uma habilidade essencial para quem trabalha com dados. Seja para limpar informações, formatar nomes, extrair domínios de e-mails ou concatenar dados, as funções de string oferecem poder e flexibilidade para transformar suas consultas.

Neste artigo, vamos explorar:

  • Tipos de dados string disponíveis no SQL Server

  • Funções nativas para manipulação de texto

  • Exemplos práticos e cenários avançados, incluindo limpeza e mascaramento de dados


🔠 Tipos de Dados de Texto no SQL Server

Antes de falar em funções, é importante entender os tipos de dados string disponíveis:

TipoTamanho Fixo?Suporta Unicode?Observações
CHAR(n)SimNãoOcupa sempre n bytes, mesmo com conteúdo menor
VARCHAR(n)NãoNãoMais econômico em armazenamento
NCHAR(n)SimSimUsa 2 bytes por caractere
NVARCHAR(n)NãoSimIdeal para multilíngue
TEXT / NTEXTNãoParcialmenteObsoletos desde SQL Server 2005+

Use sempre VARCHAR ou NVARCHAR. Evite TEXT e NTEXT em projetos novos.


🧪 Funções Nativas de Manipulação de String

✂️ Extração de partes do texto:

LEFT(CodigoProduto, 4)
RIGHT(CodigoProduto, 2)
SUBSTRING(CodigoProduto, 6, 3)

🔍 Localizar padrões:

CHARINDEX('@', Email)
PATINDEX('%@%.%', Email)

✏️ Substituir e montar strings:

REPLACE(Nome, 'a', '*')
STUFF(Codigo, 6, 3, '123')
REPLICATE('-', 5)

🧹 Limpeza de espaços:

LTRIM(), RTRIM(), TRIM() -- Disponível a partir do SQL Server 2017

🧠 Capitalização com função personalizada

Não existe função nativa para colocar a primeira letra de cada palavra em maiúsculo, mas é possível criar:

go
CREATE or ALTER FUNCTION dbo.Capitalizar(@texto VARCHAR(4000))
RETURNS VARCHAR(4000)
as
BEGIN
    DECLARE @saida VARCHAR(4000) = LOWER(@texto)
    DECLARE @pos INT = 1

    WHILE @pos <= LEN(@saida)
    BEGIN
        IF @pos = 1 OR SUBSTRING(@saida, @pos - 1, 1) = ' '
            SET @saida = STUFF(@saida, @pos, 1, UPPER(SUBSTRING(@saida, @pos, 1)))
        SET @pos += 1
    END

    RETURN @saida
END
go

SELECT NomeCompleto, dbo.Capitalizar(NomeCompleto) as Capitalizar
FROM dbo.Pessoas

🧩 Casos Avançados com String

🧵 Concatenar Linhas em Uma Única String

-- SQL Server 2017+
SELECT STRING_AGG(Nome, ', ') FROM Clientes

-- Versões anteriores
SELECT STUFF((SELECT ', ' + Nome FROM Clientes FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '')

📬 Extrair Domínio de E-mail

SUBSTRING(Email, CHARINDEX('@', Email) + 1, LEN(Email))

🛡️ Mascarar Dados

LEFT(LTRIM(Nome), 1) + REPLICATE('*', LEN(LTRIM(Nome)) - 1)

🧼 Limpeza de Caracteres Ocultos (LGPD e normalização)

REPLACE(REPLACE(REPLACE(Nome, CHAR(9), ''), CHAR(13), ''), CHAR(10), '')

Dominar funções de string é essencial para padronização de dados, carga de dados limpa em DWs e para relatórios mais legíveis. E o melhor: a maioria dessas funções está disponível desde versões antigas do SQL Server!


Fui, mas volto com mais SQL Server em breve!

✍️ Sobre o autor
O Prof. Landry é especialista em Microsoft SQL Server desde 1999, Microsoft Trainer, Professor Universitário e criador do canal SQL Server Expert no YouTube, com conteúdo técnico semanal para DBAs e profissionais de dados.

🚀 Quer aprender mais sobre SQL Server?
👉 Me acompanhe no LinkedIn e inscreva-se no canal para não perder nenhuma dica prática!

0
Subscribe to my newsletter

Read articles from SQL Server Expert directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

SQL Server Expert
SQL Server Expert

O Prof. Landry Duailibe é especialista em Microsoft SQL Server desde 1999, Microsoft Certified Trainer, professor universitário e criador do canal SQL Server Expert no YouTube, onde compartilha conteúdo técnico semanal para DBAs e profissionais de dados. Já ajudou milhares de alunos a evoluírem suas habilidades com SQL Server e conquistarem melhores oportunidades na área de dados.