最近在做项目时,需要把binary类型数据转换成字符类型的数据,发现原来可以这样写,记录下来供需要的童靴参考。
IF OBJECT_ID('fn_Binarytochar') IS NOT NULL DROP FUNCTION fn_Binarytochar GO /* ============================================= -- 作者: Haytor -- 日期: 2015-09-09 -- 描述: 把16进制数据转换成字符串数据 -- 示例: DECLARE @varBin VARBINARY(128) SET @varBin = 0x530054004400300030003100 --SELECT dbo.Fun_ConvertVarBinaryToVarChar(@varBin) --老方法 SELECT dbo.fn_Binarytochar(@varBin) -- ============================================= */ CREATE FUNCTION fn_Binarytochar( @varBin VARBINARY(MAX) ) RETURNS VARCHAR(MAX) AS BEGIN DECLARE @varChar VARCHAR(MAX) SET @varChar = CAST('' AS XML).value('xs:hexBinary(sql:variable("@varBin") )','varchar(max)') RETURN @varChar END GO IF OBJECT_ID('fn_CharToBinary') IS NOT NULL DROP FUNCTION fn_CharToBinary GO /* ============================================= -- 作者: Haytor -- 日期: 2015-09-09 -- 描述: 把成字符串数据转换成16进制数据 -- 示例: DECLARE @varChar VARCHAR(128) SET @varChar = '530054004400300030003100' SELECT dbo.fn_CharToBinary(@varChar) -- ============================================= */ CREATE FUNCTION fn_CharToBinary( @varChar VARCHAR(MAX) ) RETURNS VARBINARY(MAX) AS BEGIN DECLARE @varBin VARBINARY(MAX) DECLARE @i INT SET @i = CHARINDEX('0x',@varChar) IF @i > 0 SET @varBin = CAST('' AS XML).value('xs:hexBinary(substring(sql:variable("@varChar"),3))','varbinary(max)') ELSE SET @varBin = CAST('' AS XML).value('xs:hexBinary(sql:variable("@varChar"))','varbinary(max)') RETURN @varBin END GO