尝试这样:
DECLARE @YourString varchar(500)
SELECT @YourString='Hello World!'
;WITH AllNumbers AS
(
SELECT 1 AS Number
UNION ALL
SELECT Number+1
FROM AllNumbers
WHERE Number<LEN(@YourString)
)
SELECT
(SELECT
ASCII(SUBSTRING(@YourString,Number,1))
FROM AllNumbers
ORDER BY Number
FOR XML PATH(''), TYPE
).value('.','varchar(max)') AS NewValue
--OPTION (MAXRECURSION 500) --<<needed if you have a string longer than 100
OUTPUT:
NewValue
---------------------------------------
72101108108111328711111410810033
(1 row(s) affected)
只是为了测试一下:
;WITH AllNumbers AS
(
SELECT 1 AS Number
UNION ALL
SELECT Number+1
FROM AllNumbers
WHERE Number<LEN(@YourString)
)
SELECT SUBSTRING(@YourString,Number,1),ASCII(SUBSTRING(@YourString,Number,1)),* FROM AllNumbers
OUTPUT:
Number
---- ----------- -----------
H 72 1
e 101 2
l 108 3
l 108 4
o 111 5
32 6
W 87 7
o 111 8
r 114 9
l 108 10
d 100 11
! 33 12
(12 row(s) affected)
此外,您可能想要使用此:
RIGHT('000'+CONVERT(varchar(max),ASCII(SUBSTRING(@YourString,Number,1))),3)
强制所有ASCII值到3个数字,我不知道这是否是必要根据您的使用与否。
每个字符使用3个数字输出:
NewValue
-------------------------------------
072101108108111032087111114108100033
(1 row(s) affected)
多久可以将字符串转换呢?任何超过3个字符的东西都会变得真实丑陋。 – 2010-12-20 17:41:19
当然足够长,我需要找出不同的东西。我有几个30个字符的字符串。 – 2010-12-20 17:48:15
这仅适用于递归限制100。如果你有一个字符串长度超过100,它会在达到限制后停止执行 – 2015-03-10 21:43:06