我在SQL Server数据库中有一些base-64编码的字符串,例如:
DECLARE @x VARBINARY(64);
SET @x = 0x4b78374c6a3733514f723444444d35793665362f6c513d3d
当它是CAST或CONVERTED到VARCHAR时,我得到:
+˽Ð:¾Îréî¿•
我正在寻找SQL Server将varbin的十六进制表示形式的varchar作为varchar返回,例如:
4b78374c6a3733514f723444444d35793665362f6c513d3d
CAST / CONVERT /函数中是否有构建这样做,还是必须添加为用户定义函数?那UDF会是什么?
如果我可以在转换过程中选择是否需要大写字母A-F或小写字母a-f,那么
点数。
答案 0 :(得分:2)
DECLARE @x VARBINARY(64);
SET @x = 0x4b78374c6a3733514f723444444d35793665362f6c513d3d;
SELECT CONVERT(VARCHAR(64), @x),
SUBSTRING(CONVERT(VARCHAR(64), @x, 1), 3, 64);
----- style number is important ---^
结果:
Kx7Lj73QOr4DDM5y6e6/lQ== 4B78374C6A3733514F723444444D35793665362F6C513D3D
如果您想要小写,只需将整个SUBSTRING
操作包装在LOWER()
中。
答案 1 :(得分:1)
对于SQL2005,我会使用xsd:hexBinary
data type:
DECLARE @x VARBINARY(64);
SET @x = 0x4b78374c6a3733514f723444444d35793665362f6c513d3d
SELECT '0x'+CONVERT(XML, '').value('xs:hexBinary(sql:variable("@x") )', 'VARCHAR(MAX)');
SELECT '0x'+LOWER(CONVERT(XML, '').value('xs:hexBinary(sql:variable("@x") )', 'VARCHAR(MAX)'));
对于SQL2008 +,我会使用CONVERT(参见section Binary styles):
SELECT CONVERT(VARCHAR(MAX), @x, 1)
答案 2 :(得分:0)
对于SQL 2008 +
SELECT CONVERT(VARCHAR(MAX), @x, 1)
答案 3 :(得分:0)
建议的解决方案 SELECT CONVERT(VARCHAR(MAX), @x, 1)
返回“0x4B78374C...”,但问题显然希望结果为“4b78374c...”。
通过将“style”参数修改为 CONVERT()
并添加 LOWER()
,我们得到了提问者正在寻找的内容,无需使用 SUBSTRING()
或 RIGHT()
:>
SELECT LOWER(CONVERT(VARCHAR(MAX), @x, 2))