Usuário com melhor resposta
Substituir número por letra

Pergunta
-
Boa tarde!
Amigos, tenho uma necessidade e não estou sabendo como fazer.
Em uma determinada tabela, existe uma coluna onde é exibida mensagens de diversos tipos e junto a estas mensagens, existe códigos numéricos, como segue abaixo:
Tipo: E. Mensagem: Operação-marco 0030 da sequência 0 na ordem 1344106 ainda não foi confirmada
Tipo: E. Mensagem: Até agora só 646 PC para precedente 0030 / 0 confirmado
Tipo: E. Mensagem: Ordem 1348724 já está sendo tratada por GCUNHA
Ao fazer um select, gostaria de substituir as informações numéricas por uma letra, ou seja, para todo e qualquer número que esteja na faixa de 0 a 9, seja alterado por X.
Abraços, Julio Malliotti
Respostas
-
Mallioti,
Segue uma Function escalar para substituir os números por letras.
Faça às alterações necessárias conforme sua necessidade de uso:
CREATE FUNCTION dbo.UFN_SUBSTITUI_NUMEROS(@TEXTO varchar(500)) RETURNS varchar(500) BEGIN DECLARE @INICIO int SET @INICIO = PATINDEX('%[0-9]%', @TEXTO) WHILE @INICIO > 0 BEGIN SET @INICIO = PATINDEX('%[0-9]%', @TEXTO) IF @INICIO > 0 BEGIN SET @TEXTO = REPLACE(@TEXTO, SUBSTRING(@TEXTO, @INICIO, 1),'X') END ELSE BEGIN BREAK; END END RETURN @TEXTO END GO SELECT dbo.UFN_SUBSTITUI_NUMEROS('Operação-marco 0030 da sequência 0 na ordem 1344106 ainda não foi confirmada'); GO
Veja abaixo um print-screen como evidência de teste:
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval RamosMicrosoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Sugerido como Resposta Junior Galvão - MVPMVP sexta-feira, 5 de setembro de 2014 18:48
- Marcado como Resposta Durval RamosModerator sábado, 13 de setembro de 2014 00:57
-
Todas as Respostas
-
Julio,
Você poderia utilizar o REPLACE... O código não vai ficar lá essas coisas de bonito, mas é uma solução...
declare @Texto varchar(50) = 'Mensagem: Ordem 1348724 já está sendo tratada por GCUNHA' set @texto = replace(@texto, '0', 'X') set @texto = replace(@texto, '1', 'X') set @texto = replace(@texto, '2', 'X') set @texto = replace(@texto, '3', 'X') set @texto = replace(@texto, '4', 'X') set @texto = replace(@texto, '5', 'X') set @texto = replace(@texto, '6', 'X') set @texto = replace(@texto, '7', 'X') set @texto = replace(@texto, '8', 'X') set @texto = replace(@texto, '9', 'X') select @Texto -- resultado -- Mensagem: Ordem XXXXXXX já está sendo tratada por GCUNHA set @texto = 'Operação-marco 0030 da sequência 0 na ordem 1344106 ainda não foi confirmada' set @texto = replace(@texto, '0', 'X') set @texto = replace(@texto, '1', 'X') set @texto = replace(@texto, '2', 'X') set @texto = replace(@texto, '3', 'X') set @texto = replace(@texto, '4', 'X') set @texto = replace(@texto, '5', 'X') set @texto = replace(@texto, '6', 'X') set @texto = replace(@texto, '7', 'X') set @texto = replace(@texto, '8', 'X') set @texto = replace(@texto, '9', 'X') select @Texto -- Resultado -- Operação-marco XXXX da sequência X na ordem XXXXXX ainda não foi confirmada
Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008
- Sugerido como Resposta Junior Galvão - MVPMVP sexta-feira, 5 de setembro de 2014 18:47
-
-
Mallioti,
Segue uma Function escalar para substituir os números por letras.
Faça às alterações necessárias conforme sua necessidade de uso:
CREATE FUNCTION dbo.UFN_SUBSTITUI_NUMEROS(@TEXTO varchar(500)) RETURNS varchar(500) BEGIN DECLARE @INICIO int SET @INICIO = PATINDEX('%[0-9]%', @TEXTO) WHILE @INICIO > 0 BEGIN SET @INICIO = PATINDEX('%[0-9]%', @TEXTO) IF @INICIO > 0 BEGIN SET @TEXTO = REPLACE(@TEXTO, SUBSTRING(@TEXTO, @INICIO, 1),'X') END ELSE BEGIN BREAK; END END RETURN @TEXTO END GO SELECT dbo.UFN_SUBSTITUI_NUMEROS('Operação-marco 0030 da sequência 0 na ordem 1344106 ainda não foi confirmada'); GO
Veja abaixo um print-screen como evidência de teste:
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval RamosMicrosoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Sugerido como Resposta Junior Galvão - MVPMVP sexta-feira, 5 de setembro de 2014 18:48
- Marcado como Resposta Durval RamosModerator sábado, 13 de setembro de 2014 00:57
-