Tsql 将Varchar转换为Ascii
我试图将VARCHAR字段的内容转换为唯一的数字,以便第三方轻松引用 如何将varchar转换为等效的ascii字符串?在TSQL中?函数的作用是:转换单个字符,但如何转换整个字符串 我试过使用Tsql 将Varchar转换为Ascii,tsql,ssrs-2008,Tsql,Ssrs 2008,我试图将VARCHAR字段的内容转换为唯一的数字,以便第三方轻松引用 如何将varchar转换为等效的ascii字符串?在TSQL中?函数的作用是:转换单个字符,但如何转换整个字符串 我试过使用 CAST(ISNULL(ASCII(Substring(RTRIM(LTRIM(PrimaryContactRegion)),1,1)),'')AS VARCHAR(3)) + CAST(ISNULL(ASCII(Substring(RTRIM(LTRIM(PrimaryContactRegion)),
CAST(ISNULL(ASCII(Substring(RTRIM(LTRIM(PrimaryContactRegion)),1,1)),'')AS VARCHAR(3))
+ CAST(ISNULL(ASCII(Substring(RTRIM(LTRIM(PrimaryContactRegion)),2,1)),'')AS VARCHAR(3))
……但这是乏味的,愚蠢的外观,如果我有很长的弦,就不会真正起作用。或者如果更好的话,我该如何在SSRS中做同样的事情呢?好吧,我认为解决这个问题的方法会非常慢,但我想你可以这样做:
DECLARE @count INT, @string VARCHAR(100), @ascii VARCHAR(MAX)
SET @count = 1
SET @string = 'put your string here'
SET @ascii = ''
WHILE @count <= DATALENGTH(@string)
BEGIN
SELECT @ascii = @ascii + '&#' + ASCII(SUBSTRING(@string, @count, 1)) + ';'
SET @count = @count + 1
END
SET @ascii = LEFT(@ascii,LEN(@ascii)-1)
SELECT @ascii
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
声明@count INT、@string VARCHAR(100)、@ascii VARCHAR(MAX)
设置@count=1
SET@string='把你的字符串放在这里'
设置@ascii=“”
当@count尝试以下方法时:
DECLARE @count INT, @string VARCHAR(100), @ascii VARCHAR(MAX)
SET @count = 1
SET @string = 'put your string here'
SET @ascii = ''
WHILE @count <= DATALENGTH(@string)
BEGIN
SELECT @ascii = @ascii + '&#' + ASCII(SUBSTRING(@string, @count, 1)) + ';'
SET @count = @count + 1
END
SET @ascii = LEFT(@ascii,LEN(@ascii)-1)
SELECT @ascii
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
只是为了验证一下:
;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
此外,您可能希望使用以下选项:
RIGHT('000'+CONVERT(varchar(max),ASCII(SUBSTRING(@YourString,Number,1))),3)
为了将所有ASCII值强制转换为3位数字,我不确定根据您的使用情况是否有必要这样做
每个字符使用3位数字输出:
NewValue
-------------------------------------
072101108108111032087111114108100033
(1 row(s) affected)
要转换的字符串可能有多长?任何超过3个角色的东西都会很快变得很难看。当然足够长了,我需要寻找一些不同的东西。我有几个30个字符的字符串。作为递归限制,它最多只能工作100个字符。如果您的字符串长度超过100,它将在达到限制后停止执行。如果任何人使用此代码的字符串可能包含尾随空格,我建议将LEN()
函数的所有用法替换为DATALENGTH()
。这非常好。如果有必要,我做了一个小小的改动,让它更容易阅读RIGHT('000'+CONVERT(varchar(max)、ASCII(SUBSTRING(@YourString,Number,1))、3)+'、'
您需要围绕主SELECT语句的ASCII部分使用CAST或CONVERT语句,以使此解决方案起作用,例如CAST(ASCII(SUBSTRING(@string,@count,1))作为varchar)