ms sql(sql Server)中\u0格式(json)的unescape DIATTRICS

ms sql(sql Server)中\u0格式(json)的unescape DIATTRICS,json,sql-server,type-conversion,azure-sql-database,unicode-escapes,Json,Sql Server,Type Conversion,Azure Sql Database,Unicode Escapes,我正在获取json文件,并将其加载到Azure SQL数据库中。这个json是API的直接输出,所以在加载到DB之前我对它无能为力。 在该文件中,所有TIRC都转义为“C/C++/Java源代码”(基于: 例如: ł is \u0142 我试图找到一些方法将这些转换成正确的波兰字母 在更糟糕的情况下,我可以编写函数来替换所有的组合 Repalce(Replace(Replace(string,'\u0142',N'ł'),'\u0144',N'ń'))) 等等,做一个大的,可怕的功能 我一

我正在获取json文件,并将其加载到Azure SQL数据库中。这个json是API的直接输出,所以在加载到DB之前我对它无能为力。 在该文件中,所有TIRC都转义为“C/C++/Java源代码”(基于:

例如:

 ł is \u0142
我试图找到一些方法将这些转换成正确的波兰字母

在更糟糕的情况下,我可以编写函数来替换所有的组合

Repalce(Replace(Replace(string,'\u0142',N'ł'),'\u0144',N'ń')))
等等,做一个大的,可怕的功能

我一直在寻找一些现成的函数,比如URLdecode,这在这里的许多主题的堆栈中都得到了回答,这里:

使用此解决方案是可能的,但我无法通过适当的排序规则和类型来确定cast/convert,以获得我想要的结果。 因此,如果有人知道/拥有可以在字符串中进行转换的函数,\u这将非常好,但如果我能够正确转换,我将设法自己编写一些内容。例如,我尝试了:

 select convert(nvarchar(1), convert(varbinary, 0x0142, 1))
我假设将\u更改为0x将是答案,但它会给出一些汉字。所以这是错误的方向

编辑: 在谷歌搜索了更多信息后,我在@Pasetchnik的堆栈上发现了完全相同的问题: 看起来这将是MS SQL中最好的解决方案。 我唯一需要更改的是使用NVARCHAR而不是链接解决方案中的VARCHAR:

CREATE FUNCTION dbo.Json_Unicode_Decode(@escapedString nVARCHAR(MAX))
RETURNS nVARCHAR(MAX) 
AS 
BEGIN
    DECLARE @pos INT = 0,
            @char nvarCHAR,
            @escapeLen TINYINT = 2,
            @hexDigits TINYINT = 4

    SET @pos = CHARINDEX('\u', @escapedString, @pos)

    WHILE @pos > 0
    BEGIN
        SET @char =  NCHAR(CONVERT(varbinary(8), '0x' + SUBSTRING(@escapedString, @pos + @escapeLen, @hexDigits), 1))
        SET @escapedString = STUFF(@escapedString, @pos, @escapeLen + @hexDigits, @char)
        SET @pos = CHARINDEX('\u', @escapedString, @pos)
    END

    RETURN @escapedString 
END

代替嵌套的
REPLACE
,您可以使用:

DECLARE @string NVARCHAR(MAX)=  N'\u0142 \u0144\u0142';

SELECT @string = REPLACE(@string,u, ch)
FROM (VALUES ('\u0142',N'ł'),('\u0144', N'ń')) s(u, ch);

SELECT @string;

谢谢,这会很有帮助!但我还是希望有人知道是否有转换的选项;)现在我将准备函数,以这种方式完成这项工作