Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL konwertuje dane ciągu w formacie szesnastkowym na tekst ciągu

W przypadku MS-SQL 2008 następujący przechowywany proc skonwertuje ciąg szesnastkowy na varchar(max):

if exists (select * from dbo.sysobjects where name = 'f_hextostr' and xtype = 'FN')
drop function [dbo].[f_hextostr]
GO

CREATE FUNCTION [dbo].[f_hextostr] (@hexstring VARCHAR(max))
RETURNS VARCHAR(max)

AS

begin
 declare @char1 char(1), @char2 char(1), @strlen int, @currpos int, @result varchar(max)
 set @strlen=len(@hexstring)
 set @currpos=1
 set @result=''
 while @currpos<@strlen
  begin
   set @char1=substring(@hexstring,@currpos,1)
   set @char2=substring(@hexstring,@currpos+1,1)
   if (@char1 between '0' and '9' or @char1 between 'A' and 'F')
    and (@char2 between '0' and '9' or @char2 between 'A' and 'F')
    set @[email protected]+
     char((ascii(@char1)-case when @char1 between '0' and '9' then 48 else 55 end)*16+
     ascii(@char2)-case when @char2 between '0' and '9' then 48 else 55 end)
   set @currpos = @currpos+2
  end
 return @result
end
GO

Aby użyć, po prostu zrób coś takiego:

select dbo.f_hextostr('0x3031323')

lub

select dbo.f_hextostr(X) from MyTable


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Procedura składowana Exec do dynamicznej tabeli temp

  2. Wartości oddzielone przecinkami za pomocą zapytania SQL

  3. Uciekanie parametrów poleceń przekazanych do xp_cmdshell do dtexec

  4. Statystyki użycia procesora w bazach danych SQL Server

  5. Zapytanie o dopasowanie adresu IP w SQL Server