gpt4 book ai didi

sql-server - 在 SQL Server 中将包含空 (0x00) 字符的二进制数据转换为 ASCII

转载 作者:行者123 更新时间:2023-12-05 05:00:36 25 4
gpt4 key购买 nike

在 SQL Server (2016+) 上,我将数据存储在 varbinary 列中,由一些 Java 应用程序保存,其中混合了二进制数据和 ASCII 文本。我想使用 like 运算符或其他方式搜索该列以查找某些 ASCII 字符串,然后以 ASCII 形式查看返回值(以便我可以阅读周围的文本)。

数据包含非字符,例如“00”(0x00),这些似乎会阻止 SQL Server 转换字符串,否则可能会根据 Hex to ASCII string conversion on the fly 处的答案进行转换。 .在下面的示例中,可以看到字节“00”停止了对 ASCII 的解析。

select convert(varchar(max),0x48454C4C004F205000455445,0) as v1       -- HELL
select convert(varchar(max),0x48454C4C4F205000455445,0) as v2 -- HELLO P
select convert(varchar(max),0x48454C4C4F2050455445,0) as v3 -- HELLO PETE

我怎样才能拥有

 select convert(varchar(max), 0x48454C4C004F205000455445, 0)

...返回这样的东西?:

HELL?O P?ETE

(或者,不太理想,有一个类似于

的表达式
convert(varchar(max), 0x48454C4C004F205000455445, 0) like '%HE%ETE%'

...返回行?)

它在网站上有效 https://www.rapidtables.com/convert/number/hex-to-ascii.html48454C4C004F205000455445 作为输入。

enter image description here

我不太关心性能,但我想留在 SQL Server 中,最好是在可以轻松复制和粘贴的 T-SQL 范围内。

我试过在“00”上使用替换,但这可能会导致以 0 结尾的字符出现问题,如上例中的“5000”。可能还有 0x00 以外的字节也会导致字符串转换停止。

最佳答案

为了返回行(这个问题的更有限的版本),一个简单的 like 运算符在直接对二进制值运行时似乎可以工作,尽管中间有 0x00 值:

    0x48454C4C004F205000455445 like 'HE%ETE%'

换句话说,like 可以应付 convert 不能的地方。

要查看实际值,到目前为止我管理的最好的是:

convert(varchar(max),convert(varbinary(max),
REPLACE(
convert(varchar(max), 0x48454C4C004F205000455445, 1)
,'00',''
)
,1),0)

这给出了 HELLO PETE,并且在实际数据上工作得很好,结束了。

(这取决于不关心转换的启发式,例如 0x50 0x03 到 0x53 和类似的,但我可以接受,因为 0x0z,其中 z 是 1 到 f,代表控制字符,它不会出现在我感兴趣的文本)。

(感谢 Panagiotis Kanavos 在有用的方向上鼓励我!)

关于sql-server - 在 SQL Server 中将包含空 (0x00) 字符的二进制数据转换为 ASCII,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63043157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com