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:
Tipo | Tamanho Fixo? | Suporta Unicode? | Observações |
CHAR(n) | Sim | Não | Ocupa sempre n bytes, mesmo com conteúdo menor |
VARCHAR(n) | Não | Não | Mais econômico em armazenamento |
NCHAR(n) | Sim | Sim | Usa 2 bytes por caractere |
NVARCHAR(n) | Não | Sim | Ideal para multilíngue |
TEXT / NTEXT | Não | Parcialmente | Obsoletos 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!
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.