Rad*_*hiu 2 xml t-sql sql-server
我有一个查询,它将一个数字转换为一组ASCII字符,然后尝试将它们连接成一个字符串:
declare @number int = 651854564
;with cte as (
select @number prev_nr
, cast(char(@number % 256) as nvarchar(100)) nextchar
union all
select prev_nr / 256 prev_nr
, cast(char((prev_nr / 256) % 256) as nvarchar(100)) nextchar
from cte
where prev_nr <> 0)
select
cast(nextchar + '' as nvarchar(100))
from cte
where prev_nr <> 0
for xml path ('');
Run Code Online (Sandbox Code Playgroud)
将上述数字拆分为单个字符所产生的字符为:
characters
ä
‚
Ú
&
Run Code Online (Sandbox Code Playgroud)
但是当尝试将它们连接起来时,FOR XML它们会改变编码,以便最终&转换并连接成最终结果,即:ä‚Ú&
我该如何解决这个问题,以便获得正确的编码并生成ä‚Ú&结果?
我已尝试将所有内容转换为nvarchar(100)但我觉得这没有任何影响(实际上几乎与编码无关 - 或者至少在我的场景中没有用).
我也尝试了众所周知的STUFF有FOR XML,但没有真正的帮助.
试试这个:
declare @number int = 651854564
;with cte as (
select @number prev_nr
, cast(char(@number % 256) as nvarchar(100)) nextchar
union all
select prev_nr / 256 prev_nr
, cast(char((prev_nr / 256) % 256) as nvarchar(100)) nextchar
from cte
where prev_nr <> 0
)
select (select
cast(nextchar + '' as nvarchar(100))
from cte
where prev_nr <> 0
for xml path (''), type).value('.','nvarchar(max)')
Run Code Online (Sandbox Code Playgroud)
rextester演示:http://rextester.com/QRUE46541
收益: ä‚Ú&