我数据库里有个字段beizhu里保存的是base64?的一对代码我想在查询分析器里用一个select 把他还原成原来的内容,谁知道咋整呀

解决方案 »

  1.   

    base64 ?
    sql好像没有直接的转换工具,需要写一个function来转。
      

  2.   

    是不是这东西,看不懂啊
    -- 调用示例SELECT -- 还原成字符串val = CONVERT(nvarchar(max), val)FROM(SELECT -- 解码base64 编码val = dbo.f_base64_decode(val)FROM( -- 通过for xml 生成base64 编码SELECT val = (SELECT CONVERT(varbinary(max), N'base64 test') FOR XML PATH(''), TYPE).value('/', 'nvarchar(max)') UNION ALLSELECT val = (SELECT CONVERT(varbinary(max), N'base64 解码测试') FOR XML PATH(''), TYPE).value('/', 'nvarchar(max)'))DATA)A----------------------------------------------------------- 环境要求适用于sql server 2005 或者更高的版本-- ==== 邹建.02(引用请保留此信息) =============== */CREATE FUNCTION dbo.f_base64_decode(@input varchar(max))RETURNS varbinary(max)ASBEGINDECLARE@base64 char(64),@pos int,@len int,@output varbinary(max); SELECT@base64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',@pos = 1,@len = LEN(@input),@output = 0x; IF @len % 4 > 0RETURN NULL; WHILE @pos < @lenBEGINSELECT@output = @output+ CONVERT(binary(1), ((v1 & 63) * 4 ) | ((v2 & 48) / 16))+ CONVERT(binary(1), ((v2 & 15) * 16) | ((v3 & 60) / 4 ))+ CONVERT(binary(1), ((v3 & 3 ) * 64) | ((v4 & 63) / 1 )),@pos = @pos + 4FROM(SELECTv1 = CHARINDEX(SUBSTRING(@input, @pos + 0, 1) COLLATE Chinese_PRC_BIN, @base64) - 1,v2 = CHARINDEX(SUBSTRING(@input, @pos + 1, 1) COLLATE Chinese_PRC_BIN, @base64) - 1,v3 = CHARINDEX(SUBSTRING(@input, @pos + 2, 1) COLLATE Chinese_PRC_BIN, @base64) - 1,v4 = CHARINDEX(SUBSTRING(@input, @pos + 3, 1) COLLATE Chinese_PRC_BIN, @base64) - 1 )A; END; RETURN(SUBSTRING(@output, 1, @len / 4 * 3 - 3 + CHARINDEX('=', RIGHT(@input, 2) + '='))); END; GO