Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

eriva_br

[Resolvido] função para converter e desconverter em ASC

Recommended Posts

funções para realizar a conversão para ASC e depois a desconversão em SQL Server

 

possíveis casos de uso:

- enviar para documentos/objetos onde existem problemas de codificações e você já tentou usar tudo quanto é código ISO-8859-1, utf8, utf16, 1252, etc, e não funfa, dai você manda convertido pra ASC onde só vai ter números e depois desconverte

select dbo.convertASC('Erivelton')   -->Retorna: 69-114-105-118-101-108-116-111-110- select dbo.DESconvertASC('69-114-105-118-101-108-116-111-110-') -->Retorna: Erivelton
- outro situação seria em uma consulta sql com o caracter percentagem "%" (e agora é percentagem ou porcentagem ??????)

set nocount on create table #teste (teste varchar(30)) insert into #teste (teste) values ('teste%') insert into #teste (teste) values ('teste') insert into #teste (teste) values ('%teste') insert into #teste (teste) values ('e%')  --consultando pelos códigos 101 e 37 que equivalem respectivamente "e" e "%" select dbo.convertASC(teste), * from #teste where dbo.convertASC(teste) like '%101-37%' --consultado só quando encontrar "e%" --OU colocaremos a função converterASC dentro do like pra naum ter que ficar adivinhando os códigos... select dbo.convertASC(teste), * from #teste where dbo.convertASC(teste) like '%' + dbo.convertASC('e%') + '%' --consultado só quando encontrar "e%"  drop table #teste
OBS.: para consultas like com o caracter "%" na string a ser pesquisada este foi a unica forma que consegui, caso tiver alguma forma mais simples por favor poste aqui...

 

 

vamos as funções:

Função para converter em ASC

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[convertASC]') and xtype in (N'FN', N'IF', N'TF')) drop function [dbo].[convertASC] GO CREATE FUNCTION convertASC (@param_Entrada VARCHAR(8000)) RETURNS VARCHAR(8000) AS BEGIN  DECLARE @posicao INT,   @aux VARCHAR(8000)   SET @aux = ''  SET @posicao = 1  WHILE @posicao <= DATALENGTH(@param_Entrada)  BEGIN   SET @aux = @aux + LTRIM(STR(ASCII(SUBSTRING(@param_Entrada, @posicao, 1)))) + '-'   SET @posicao = @posicao + 1  END  RETURN @aux  END

Função para DESconverter

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[DESconvertASC]') and xtype in (N'FN', N'IF', N'TF')) drop function [dbo].[DESconvertASC] GO CREATE FUNCTION DESconvertASC (@param_Entrada VARCHAR(8000)) RETURNS VARCHAR(8000) AS BEGIN  DECLARE @Valor_Original VARCHAR(8000),	@Caracter VARCHAR(8000),   @position INT    Set @Caracter = ''  set @Valor_Original = ''  set @position = 1    WHILE @position <= DATALENGTH(@param_Entrada)		 BEGIN    IF SUBSTRING(@param_Entrada, @position, 1) = '-'   begin	Set @Valor_Original = @Valor_Original + CHAR(@Caracter)	set @Caracter = ''   end	  else   begin		 set @Caracter = @Caracter + SUBSTRING(@param_Entrada, @position, 1)   end	 SET @position = @position + 1  END    RETURN @Valor_Original END

 

AUTOR: "eriva_br"

 

Dúvidas, criticas, contribuições, correções e adições seram bem vindas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.