sql 2000解码 我数据库里有个字段beizhu里保存的是base64?的一对代码我想在查询分析器里用一个select 把他还原成原来的内容,谁知道咋整呀 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 base64 ?sql好像没有直接的转换工具,需要写一个function来转。 是不是这东西,看不懂啊-- 调用示例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 Sql2005 安装出错 29506 29508 XML筛选问题 弱弱的UPDATE问题 请大家继续帮帮忙哈!SQL2000中的SELECT语句. 数据累加到10000时退出 怎么样让指定的列不显示 还是分红的问题? 关于使用xlock锁定的问题,一直好糊涂 数据库登录的问题。(准菜鸟) SQLSERVER中如何写触发器,当更改一条记录时,该记录的一个字段如OP_TIME会自动更新成当前时间 sql语句问题 分组GROUP 如何计算一个日期的提前两天的日期是多少?
sql好像没有直接的转换工具,需要写一个function来转。
-- 调用示例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