varchar()中的十六进制字符实际上是ascii。需要解码它

时间:2010-05-25 19:42:29

标签: sql encoding ascii hex decoding

这是一个问题的边缘情况,如果有一个简单的方法,我会感到惊讶。

我有一个MS SQL DB,其字段类型为varchar(255)。它包含一个十六进制字符串,当您使用ascii解码器解码它时,它实际上是一个Guid。我知道这听起来很奇怪,但这是一个例子:

该字段的内容:“38353334373838622D393030302D343732392D383436622D383161336634396339663931”

实际代表:“8534788b-9000-4729-846b-81a3f49c9f91”

我需要一种解码方法,只需将字段内容更改为它所代表的实际guid。我需要在T-SQL中执行此操作,我不能使用.Net(如果可以的话,这非常简单)。

更新:有些人已经采用了可能在一次性语句中运行的方法,我需要一种方法将其放入UPDATE语句中。

例如:UPDATE MyTable SET MyField = MyFunction(MyField)

MyFunction是这个问题的正确答案。

2 个答案:

答案 0 :(得分:6)

这会给你你想要的东西..8534788b-9000-4729-846b-81a3f49c9f91

select CONVERT(varchar(36),
0x38353334373838622D393030302D343732392D383436622D383161336634396339663931)

您需要将值转换为varbinary,然后转换回varchar

这是使用动态SQL的一种方法

    declare @v varchar(100)
 select @v = '0x' + '38353334373838622D393030302D343732392D383436622D383161336634396339663931'

exec ( 'SELECT CONVERT(varchar(36),' + @v + ')')

答案 1 :(得分:1)

如果您想转换单个字符,可以使用CHAR函数进行转换:

SELECT CHAR(0x38)

但是你必须记住在数字前加上0x,因为它是十六进制的。