我创建了一个 MSSQL Server 函数,它使用“#”和“;”将特殊字符(例如:हिन्दीabcde fG#)编码为 unicode 数字 作为分隔符。只有像“abc”这样非常简单的字符不会被编码:
declare @position int, @txt nvarchar(max), @output as varchar(max);
set @position=1;
set @txt = N'हिन्दीabcde fG#';
set @output = '';
while @position <= len(@txt)
begin
declare @t int;
select @t=unicode(substring(@txt,@position,1))
--print '&#'+ CONVERT(nvarchar(5),@t)+';'
if ( (@t between 48 and 57) OR (@t between 65 and 90) or (@t between 97 and 122) )
BEGIN
SET @output = @output + CONVERT(nvarchar(5), substring(@txt,@position,1) );
END
else
BEGIN
SET @output = @output + '#'+ CONVERT(nvarchar(5),@t)+';'
END
set @position = @position+1
end
Print @output
结果是:
2361;#2367;#2344;#2381;#2342;#2368;abcde#32;fG#35;
我需要它来使用 ODBC 驱动程序并避免特殊字符的问题。
但现在我需要回去的路——解码编码的字符。是否有任何聪明的解决方案或者我需要至少两个循环,“NCHAR”函数......?
我会尝试构建这样的功能 - 如果成功,我会在这里发布:)