我有一个包含 varchar(1024) 字段的表,其中包含具有十六进制编码字符串的字符串。此表是自动填充的,我必须提供一个 SP 以允许用户下载它,因此,我需要将十六进制更改回人类可读的形式。
如果我手动运行此语句(从字段中获取十六进制数据),它工作得很好:
SELECT X'5468697320697320612074657374206D6573736167652031323334353637383930';
但是我找不到在调用字段/列名称时让它工作的工作示例。我找到了一些示例,但这些示例仅返回 null 或 0。
我试过 X 和 UnHex() 都没有给我结果。
我哪里错了?
谢谢
编辑:
好吧,在做了更多的测试之后,它似乎首先是它被写入数据库的方式。
这是一个调用 SP 的经典 ASP 页面,SP 会创建数据库条目。在这种方法中,写入数据库有效,我可以在字段中看到 HEX 内容。复制该字段的内容,并将其放入 Select X'123123' 中,可以得到我想要的 ASCII 值。
如果我尝试将其作为 Select,则会失败,返回零或 Null。
SELECT Message_Body_Hex, UNHEX(Message_Body_Hex) FROM messages_inbound
返回:
Message_Body_Hex......unhex(Message_Body_Hex)
417265612032........(NULL)
还是一头雾水! :)
最佳答案
我意识到这是一个老问题,但我今天遇到了同样的问题,并结合使用 HEX 和 CAST 解决了它。使用您的示例,试试这个:
SELECT HEX(CAST(X'5468697320697320612074657374206D6573736167652031323334353637383930' AS CHAR(33)))
从表中提取时,您将替换字段名称:
SELECT HEX(CAST(binary_field AS CHAR(33)))
我已经看到其他建议使用 MAX 代替 33 的答案,但这似乎工作正常。以下是我使用的一些来源:
SQL Server converting varbinary to string
和
How to convert from varbinary to char/varchar in mysql
关于MySQL - 我如何取消一个字段而不是一个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15477496/