Strings no SQL Server
- Amanda Nascimento
- 1 de jun.
- 8 min de leitura
Strings são sequências de caracteres e no SQL Server, os tipos de dados mais comuns para armazenar strings são:
CHAR(n): armazena uma string de tamanho fixo.
VARCHAR(n): armazena uma string de tamanho variável.
TEXT: tipo antigo, usado para grandes volumes de texto (evite em novos projetos).
NVARCHAR(n): como o VARCHAR, mas suporta caracteres Unicode (ideal para dados multilíngues).
LEN()
LEN() – Retorna o número de caracteres (sem espaços no final)
💠 Exemplo 1
SELECT LEN('Amanda ') AS Tamanho; -- Retorna 6 (espaços à direita são ignorados)
💠 Exemplo 2
SELECT *
FROM psecao
WHERE LEN(codigo) = 33 AND SUBSTRING(codigo, 7, 4) = '0623';
💠 Exemplo 3 Retornar o tamanho de uma string com where
SELECT *
FROM psecao
WHERE LEN(codigo) = 33 AND SUBSTRING(codigo, 7, 4) = '0623';
LTRIM() e RTRIM()
LTRIM() e RTRIM() – Remove espaços à esquerda e à direita
SELECT LTRIM(' Amanda') AS SemEspacosEsquerda;
SELECT RTRIM('Amanda ') AS SemEspacosDireita;
TRIM()
Remove espaços à esquerda e à direita (melhor que LTRIM + RTRIM).
SELECT TRIM(' amanda ') AS Resultado; -- 'amanda'
LEFT() e RIGHT()
LEFT() e RIGHT() – Captura os primeiros ou últimos caracteres
SELECT LEFT('Amanda Nascimento', 6) AS Nome; -- "Amanda"
SELECT RIGHT('Amanda Nascimento', 10) AS Sobrenome; -- "Nascimento"
SUBSTRING()
SUBSTRING() – Extrai parte de uma string
💠 Exemplo 1
SELECT SUBSTRING('Amanda Nascimento', 8, 10) AS Parte; -- "Nascimento"
💠 Exemplo 2, extrair o DDD de um número de telefone:
-- Assumindo formato (35)99999-9999
SELECT SUBSTRING(telefone, 2, 2) AS DDD
FROM tabela_clientes;
💠 Exemplo 3
SELECT SUBSTRING('Olá, mundo!', 5, 5) AS Resultado;
💠 Exemplo 4
SELECT *
FROM psecao
WHERE LEN(codigo) = 33 AND SUBSTRING(codigo, 7, 4) = '0623';
💠 Exemplo 5
WHERE SUBSTRING(PFUNC.CODSECAO, 6, 6) = '.0623.'
CHARINDEX()
CHARINDEX() – Retorna a posição de uma substring
💠 Exemplo 1
SELECT CHARINDEX('Nas', 'Amanda Nascimento') AS Posicao; -- 8
💠 Exemplo 2 separar informações de uma string com delimitadores
-- Exemplo: "Consulta >> Procedimento >> Autorização"
SELECT
LEFT(assunto, CHARINDEX('>>', assunto) - 1) AS Categoria1
FROM baseansnip;
REPLACE()
REPLACE() – Substitui parte da string
SELECT REPLACE('Amanda Nascimento', 'Nascimento', 'Silva') AS NovoNome;
-- Resultado: "Amanda Silva"
💠 Exemplo 1
SELECT REPLACE('Olá, mundo!', 'mundo', 'amigo') AS Resultado;
💠 Exemplo 2
UPDATE tabela
SET coluna = REPLACE(coluna, 'valor_antigo', 'valor_novo')
WHERE condição;
💠 Exemplo 3
REPLACE(PFUNC.SALARIO, '.', ',') AS 'REMUNERACAO_MENSAL',
TRANSLATE()
Substitui vários caracteres ao mesmo tempo.
SELECT TRANSLATE('123-456', '123', 'abc') AS Resultado; -- 'abc-456'
UPPER() e LOWER()
UPPER() e LOWER() – Transforma em maiúsculas ou minúsculas
💠Exemplo 1
SELECT UPPER('amanda nascimento') AS Maiusculas; -- "AMANDA NASCIMENTO"
SELECT LOWER('AMANDA NASCIMENTO') AS Minusculas; -- "amanda nascimento"
💠Exemplo 2
-- Deixar todos os nomes com letras minúsculas
SELECT LOWER(nome_cliente) AS nome_normalizado
FROM vendas;
💠Exemplo 3
-- Criar uma URL personalizada com base no nome
SELECT LOWER(REPLACE('Amanda Nascimento', ' ', '-')) AS url_amigavel;
-- Resultado: "amanda-nascimento"
CAST()
Converte valores para outro tipo de dados de forma simples.
💠Exemplo 1
Converter número para texto
SELECT CAST(123 AS VARCHAR) AS Texto;
-- Resultado: '123'
💠Exemplo 2
Padronizar valores numéricos como texto com zeros à esquerda
SELECT RIGHT('00000' + CAST(123 AS VARCHAR), 5) AS CodigoFormatado;
-- Resultado: '00123'
💠Exemplo 3
Moeda
SELECT CAST(1234.56 AS MONEY) AS Valor;
-- Resultado: 1234.5600
SELECT FORMAT(CAST(1234.56 AS MONEY), 'N2', 'pt-BR') AS Valor;
-- Resultado: 1.234,56
CONVERT)
Semelhante ao CAST(), mas com mais controle sobre datas e formatação.
💠Exemplo 1
SELECT CONVERT(VARCHAR, GETDATE(), 103) AS DataFormatada;
-- Resultado: '01/06/2025' (formato dd/mm/yyyy com estilo 103)
Clique aqui para saber mais sobre datas no sql server!
💠Exemplo 2
Usando CONVERT() + manipulação de string (manual)
SELECT 'R$ ' + REPLACE(CONVERT(VARCHAR, CAST(1234.56 AS MONEY), 1), '.00', '') AS Valor;
-- Resultado: R$ 1,234.56 (em inglês, estilo 1)
SELECT 'R$ ' + REPLACE(REPLACE(CONVERT(VARCHAR, CAST(1234.56 AS MONEY), 1), ',', '#'), '.', ','), '#' , '.') AS Valor;
-- Resultado: R$ 1.234,56
FORMAT()
Oferece formatação personalizada, inclusive com separadores, moedas, cultura, etc.
Formata valores (números, datas) como texto.
⚠️ Atenção: FORMAT() é ótimo para exibição, mas não é recomendado para cálculos em grandes volumes de dados porque pode afetar a performance.
💠Exemplo 1
Formatando data
SELECT FORMAT(GETDATE(), 'dd/MM/yyyy') AS DataBR;
SELECT FORMAT(GETDATE(), 'dddd', 'pt-BR') AS DiaSemana;
Formatando data e hora
SELECT FORMAT(GETDATE(), 'dd/MM/yyyy HH:mm') AS DataHora;
-- Resultado: '01/06/2025 14:45'
Para saber mais sobre datas no SQL Server, clique aqui
💠Exemplo 2
SELECT FORMAT(1234567.89, 'N2') AS ValorFormatado;
-- Resultado: '1,234,567.89'
SELECT FORMAT(1234567.89, 'N2', 'pt-BR') AS ValorBR;
-- Resultado: 1.234.567,89
SELECT FORMAT(1234567.89, 'N2', 'en-US') AS ValorUS;
-- Resultado: 1,234,567.89
💠Exemplo 3
Formatando moeda
SELECT FORMAT(1234.56, 'C', 'pt-BR') AS ValorFormatado;
-- Resultado: R$ 1.234,56
SELECT FORMAT(1000000, 'C', 'pt-BR') AS Valor;
-- Resultado: R$ 1.000.000,00
SELECT FORMAT(99.9, 'C2', 'pt-BR') AS Valor;
-- Resultado: R$ 99,90
'C' = currency (moeda)
'pt-BR' = cultura brasileira (usa vírgula como separador decimal e ponto para milhar)
💠Exemplo 4
Formatação percentual. O valor é multiplicado por 100 automaticamente e o símbolo de % é adicionado.
SELECT FORMAT(0.125, 'P2') AS Percentual; -- '12.50 %'
P = Percentual (Percentage)
2 = Número de casas decimais
SELECT FORMAT(0.125, 'P0') AS P0; -- '13 %'
SELECT FORMAT(0.125, 'P1') AS P1; -- '12.5 %'
SELECT FORMAT(0.125, 'P3') AS P3; -- '12.500 %'
💠Exemplo 5 Número fixo com casas decimais. Diferente de 'N2', esse formato não adiciona separador de milhar.
SELECT FORMAT(1234.56, 'F2') AS Fixo;
-- Resultado: '1234.56'
F = Fixed-point (número fixo)
2 = Duas casas decimais
💠Exemplo 6
Dígitos com zeros à esquerda
SELECT FORMAT(45, 'D4') AS Digitos; -- '0045'
D = Decimal (inteiros)
4 = Total de dígitos desejado
Código | Significado | Exemplo com 1234567.89 | Explicação |
'N2' | Número com 2 casas decimais | '1,234,567.89' | Milhar com vírgula e 2 casas decimais |
'N0' | Número sem casas decimais | '1,234,568' | Arredonda para inteiro |
'C' | Moeda com 2 casas (depende da cultura) | 'R$ 1.234.567,89' (com pt-BR) | Mostra como valor monetário |
'C0' | Moeda sem casas decimais | 'R$ 1.234.568' | Arredonda valor monetário |
'P' | Porcentagem com 2 casas | '123.456.789,00 %' | Multiplica por 100 e adiciona % |
'P0' | Porcentagem sem casas | '123.456.789 %' | Igual acima, mas sem casas decimais |
'D5' | Dígito com padding (inteiros) | '00123' | Preenche com zeros à esquerda (5 dígitos) |
'E' | Notação científica | '1.234568E+006' | Científico (pouco usado em relatórios) |
'F2' | Número fixo com 2 casas decimais | '1234567.89' | Sem separador de milhar |
'G' | General (sem formatação fixa) | '1234567.89' | Simples, apenas o número |
'X' | Hexadecimal (inteiros) | '7B' (para 123) | Muito usado com IDs, etc. |
CONCAT()
Concatena (junta) duas ou mais strings, mesmo com NULL.
CONCAT() ou + para forçar string
SELECT CONCAT('Amanda', ' ', 'Nascimento') AS NomeCompleto;
Ao usar + ou CONCAT() com uma string, o SQL Server converte automaticamente os outros valores
SELECT 'A data é: ' + CAST(GETDATE() AS VARCHAR) AS Frase;
SELECT CONCAT('ID: ', 123, ', Nome: ', 'Amanda') AS Resultado;
-- Resultado: 'ID: 123, Nome: Amanda'
STR()
Converte número em string com formatação
SELECT STR(1234.5678, 10, 2) AS NumeroFormatado;
-- Resultado: ' 1234.57' (com espaços à esquerda)
O primeiro argumento é o número
O segundo é o total de caracteres
O terceiro é o número de casas decimais
STRING_AGG()
Agrupa várias strings em uma só, com separador.
SELECT STRING_AGG(nome, ', ') AS nomes
FROM tabela_clientes;
REPLICATED()
Repete uma string n vezes.
SELECT REPLICATE('-', 10) AS LinhaSeparadora; -- ----------
SPACE()
Gera espaços em branco.
SELECT 'Amanda' + SPACE(5) + 'Nascimento' AS Espacado;
PATINDEX()
Retorna a posição de um padrão (com wildcards).
SELECT PATINDEX('%med%', 'Umed Brasil') AS Posicao;
QUOTENAME()
Adiciona colchetes ([ ]) ou aspas em torno de uma string (usado para proteger identificadores).
SELECT QUOTENAME('nome da tabela') AS Protegido; -- [nome da tabela]
STRING_SPLIT()
Divide uma string em partes com base em um delimitador.
SELECT value
FROM STRING_SPLIT('Amanda,Nascimento,Silva', ',');
UNICODE() e NCHAR()
Lida com códigos Unicode (caracteres especiais, emojis, etc.).
SELECT UNICODE('Á') AS CodigoUnicode;
SELECT NCHAR(193) AS Letra; -- Retorna 'Á'
STUFF()
A função STUFF insere uma string em outra, substituindo um número específico de caracteres a partir de uma posição definida.
💠Exemplo 1
SELECT STUFF(LOWER(nome), 1, 1, UPPER(SUBSTRING(nome, 1, 1))) AS Resultado
FROM tabela1;
Neste exemplo, a função STUFF é usada para substituir o primeiro caractere da string pela versão em maiúscula desse caractere. A função LOWER é usada para converter toda a string em minúsculas antes da substituição.
💠Exemplo 2
Remover os 3 primeiros caracteres:
SELECT STUFF('Amanda Nascimento', 1, 3, '') AS Resultado;
-- Resultado: "nda Nascimento"
💠Exemplo 3
Inserir um texto no meio de outro:
SELECT STUFF('Amanda Nascimento', 8, 0, ' da Silva') AS Resultado;
-- Resultado: "Amanda da Silva Nascimento"
Exemplos práticos
Extrair primeiro nome e sobrenome
SELECT
LEFT(nome, CHARINDEX(' ', nome) - 1) AS PrimeiroNome,
SUBSTRING(nome, CHARINDEX(' ', nome) + 1, LEN(nome)) AS Sobrenome
FROM (
SELECT 'Amanda Nascimento' AS nome
) AS exemplo;
Substituir acentos
SELECT

ID, UPPER(REPLACE(REPLACE(REPLACE(RTRIM(NOME_CARGO), 'ç', 'c'), 'á', 'a'), 'é', 'e')) AS NOME_CARGO,
CODIGO_CARGO
FROM FUNCO;
Identificar se existe espaço após o último caractere
Contagem:
SELECT COUNT(*) as contagem
FROM pfuncao
WHERE RIGHT(nome, 1) = ' '
and INATIVA = '0'
Identificação:
SELECT nome
FROM pfuncao
WHERE RIGHT(nome, 1) = ' '
and INATIVA = '0'
Correção:
UPDATE PFUNCAO
SET pfuncao.nome = RTRIM(nome)