我正在尝试拆分nvarchar(max)
的字符串
如果我传递字符串
@String_xyz = 'abc@def#ghi$jkl'
然后我可以替换特殊字符,但我的角色有一种不可读的格式,如?????
如果我像这样发送我的字符串
@String_xyz = N'abc@def#ghi$jkl'
然后我无法替换任何特殊字符
让我们说
DECLARE @string nvarchar(max)
SET @string = 'என்$பெயர்@PIN@ஆகிறது##என்$பெயர்@KUL@ஆகிறது'
SET @string = replace(@string,'##',' ') -- This work perfect
如果
DECLARE @string nvarchar(max)
SET @string = N'என்$பெயர்@PIN@ஆகிறது##என்$பெயர்@KUL@ஆகிறது'
SET @string = replace(@string,'##',' ') -- This will not work
请告诉我任何可能的解决方案
where abc-def-ghi-jkl are multilanguage character
排序规则:SQL_Latin1_General_CP1_CI_AS
答案 0 :(得分:1)
重点是 UNICODE
您必须确保在所有地方使用unicode
文字字符串必须以N
无处不在
试试这个
--This will come out with question marks
SELECT 'என்$பெயர்@PIN@ஆகிறது##என்$பெயர்@KUL@ஆகிறது';
--And this is the correct output
SELECT N'என்$பெயர்@PIN@ஆகிறது##என்$பெயர்@KUL@ஆகிறது';
--Here I replace one of the characters with a "%"
SELECT REPLACE(N'என்$பெயர்@PIN@ஆகிறது##என்$பெயர்@KUL@ஆகிறது',N'கி',N'%')
这在这里工作得很好......
无法再验证这一点,但可能是第一次尝试输出错误。我尝试了几种排序规则。有了这个,我得到了想要的
SELECT N'YourString' COLLATE Indic_General_90_BIN;
使用过后,没关系。所以 - 但这只是猜测 - 可能是,SQL Server必须首先学习 ......
答案 1 :(得分:0)
如果你的代码是
DECLARE @string nvarchar(max) = N'என்$பெயர்@PIN@ஆகிறது##என்
SET @string = replace(@string,'##',' ')
结果为
என்$பெயர்@PIN@ஆகிறது என்$பெயர்@KUL@ஆகிறது
如果
DECLARE @string1 nvarchar(max) = 'என்$பெயர்@PIN@ஆகிறது##என்$பெயர்@KUL@ஆகிறது'
SET @string1 = replace(@string1,'##',' ')
然后
???$?????@PIN@?????? ???$?????@KUL@??????
如果
DECLARE @string2 varchar(max) = 'என்$பெயர்@PIN@ஆகிறது##என்$பெயர்@KUL@ஆகிறது'
SET @string2 = replace(@string2,'##',' ')
然后
???$?????@PIN@?????? ???$?????@KUL@??????
如果
DECLARE @string3 varchar(max) = N'என்$பெயர்@PIN@ஆகிறது##என்$பெயர்@KUL@ஆகிறது'
SET @string3 = replace(@string3,'##',' ')
然后
???$?????@PIN@?????? ???$?????@KUL@??????
如果将字符串声明为nvarchar,则必须在字符串之前给出N',否则unicodes将无效。