【问题标题】:SQL Server : hex to base64SQL Server:十六进制到base64
【发布时间】:2017-01-20 07:40:15
【问题描述】:

我有一个 SQL Server 数据库,其中 jpeg 图像存储为十六进制 (0xFFD8...) 有没有办法查询结果将是 base64 而不是十六进制?

我试图用谷歌搜索,但找不到类似的东西:/

【问题讨论】:

  • 可能是 stackoverflow.com/questions/5082345/… 的副本。接受的答案应符合您的要求。 (由于开放的赏金,我不能投票关闭作为副本)
  • @EdHarper 不是真的,那是 base64 的字符串,问题是 base64 的十六进制。
  • @dadde - 只需进行最少的更改即可使我链接的答案适用于二进制数据类型。我坚持认为这是重复的断言。
  • @EdHarper 好的,我也在看那个答案,但我认为这里的主要问题是十六进制转换,而不是 base64 转换。不过我尊重你的评论。

标签: sql sql-server sql-server-2008 mssql-jdbc


【解决方案1】:

您可以利用 sql 解析器本身将十六进制转换为 varbinary:

DECLARE @TestBinHex varchar(max), @TestBinary varbinary(max), @Statement nvarchar(max);
SELECT @TestBinHex = '0x012345';
SELECT @Statement = N'SELECT @binaryResult = ' + @TestBinHex;
EXECUTE sp_executesql @Statement, N'@binaryResult varbinary(max) OUTPUT', @binaryResult=@TestBinary OUTPUT;
SELECT @TestBinary

这将使 sp_executesql 执行动态 SQL,其中包含 T-SQL 解析器完全理解的文字 0x012345。然后,您可以将结果输入@EdHarper 引用的 XML 技巧,如下所示:

DECLARE @TestBinHex varchar(max), @TestBinary varbinary(max), @Statement nvarchar(max);
SELECT @TestBinHex = '0x012345';
SELECT @Statement = N'SELECT @binaryResult = ' + @TestBinHex;
EXECUTE sp_executesql @Statement, N'@binaryResult varbinary(max) OUTPUT', @binaryResult=@TestBinary OUTPUT;

SELECT
    CAST(N'' AS XML).value(
          'xs:base64Binary(xs:hexBinary(sql:column("bin")))'
        , 'VARCHAR(MAX)'
    )   Base64Encoding
FROM (
    SELECT @TestBinary AS bin
) AS bin_sql_server_temp;

【讨论】:

  • 这真的很有帮助 - 只是为我节省了很多工作。谢谢
  • @RobP。如果这解决了您的问题,为什么不将此答案标记为正确?
  • @Yahfoufi - 我不是提问者,但它确实帮助了我很多。
【解决方案2】:

这是一个包含存储为十六进制图像的表格的示例:

create table t (s image,s_base64 varchar(max));
insert t(s)
values(CAST('This is an image column' as image));

这是一个将十六进制图像转换为 base64 的示例

 create view v
 as
 select CAST(s as varbinary(max)) as s,s_base64 from t;
 GO
 update v set s_base64= CAST(N'' AS xml).value('xs:base64Binary(sql:column("v.s"))', 'varchar(max)');
 GO

 select * from v;

【讨论】:

    猜你喜欢
    • 2020-09-27
    • 1970-01-01
    • 2023-04-02
    • 2017-12-05
    • 2013-06-10
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 2011-12-09
    相关资源
    最近更新 更多