如何将 nvarchar 解码为文本(SQL Server 2008 R2)?

发布于 2024-11-14 06:11:01 字数 279 浏览 4 评论 0原文

我有一个带有 nvarchar(4000) 字段的 SQL Server 2008 R2 表。

存储此表的数据类似于

'696D616765206D61726B65643A5472'

'303131' ("011")

我看到每个字符都编码为十六进制。

我如何从表中读取这些数据?我不想写解码函数,我的意思是存在更简单的方法。

PS 抱歉我的英语。

I have a SQL Server 2008 R2 table with nvarchar(4000) field.

Data that stores this table look like

'696D616765206D61726B65643A5472'

or

'303131' ("011").

I see that each char is encoding to hex.

How can I read those data from table? I don't want write decoding function, I mean that simpler way exists.

P.S. Sorry for my English.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

坐在坟头思考人生 2024-11-21 06:11:01

SQL Server 2008实际上具有内置的十六进制编码和解码功能!

示例(将字符串转换为 VarBinary 时,请注意值为“1”的第三个参数):

DECLARE @ProblemString VarChar(4000) = '54657374'
SELECT Convert(VarChar, Convert(VarBinary, '0x' + @ProblemString, 1))

参考:http://blogs.msdn.com/b/sqltips/archive/2008/07/02/converting-from- hex-string-to-varbinary-and-vice-versa.aspx

这种方法的优点是您不需要“Exec”调用,您通常会尽量避免这种调用,因为担心注入等事物。缺点是它仅适用于 SQL Server 2008 及更高版本。

SQL Server 2008 actually has a built-in hex-encoding and decoding feature!

Sample (note the third parameter with value "1" when converting your string to VarBinary):

DECLARE @ProblemString VarChar(4000) = '54657374'
SELECT Convert(VarChar, Convert(VarBinary, '0x' + @ProblemString, 1))

Ref: http://blogs.msdn.com/b/sqltips/archive/2008/07/02/converting-from-hex-string-to-varbinary-and-vice-versa.aspx

The advantage of this approach is that you don't need the "Exec" call, which you generally try to avoid, for fear of injection among other things. The disadvantage is that it only works in SQL Server 2008 and later.

与他有关 2024-11-21 06:11:01

我认为你将需要一个解码函数,最简单的:

declare @fld nvarchar(4000) = '696D616765206D61726B65643A5472'

exec('SELECT CONVERT(varchar(max),0x' + @fld + ')')

---------------
image marked:Tr

You will need a decoding function I think, the simplest:

declare @fld nvarchar(4000) = '696D616765206D61726B65643A5472'

exec('SELECT CONVERT(varchar(max),0x' + @fld + ')')

---------------
image marked:Tr
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文