我使用unicode提供了一些JSON格式的数据库数据( server 2008),如下所示:
{"PCode":"999999","Code":"123","effect":"\u4e2d\u6587\u5b57\u6e2c\u8a66"}\u4e2d\u6587\u5b57\u6e2c\u8a66是汉字,我怎么才能把汉字中的数据删除呢?
发布于 2021-06-11 07:10:54
答案:
似乎您使用的是Server 2008 (其中没有JSON支持),因此,一个可能的方法是将unicode序列解析为XML。请注意,XML不使用\u符号,因此需要使用XML字符引用&#x[0-9a-fA-F];转换此JSON文本
:
DECLARE @text nvarchar(max)
SET @text = N'\u4e2d\u6587\u5b57\u6e2c\u8a66'
DECLARE @xml xml
SET @xml = N'<x>' + STUFF(REPLACE(@text, N'\u', N';&#x'), 1, 1, N'') + N';</x>'
SELECT @xml.value('(/x)[1]', 'nvarchar(max)') AS [ChineseText]结果:
ChineseText
-----------
中文字測試注意,在Server 2016中,您可以使用JSON_VALUE()轻松地解析JSON。
SELECT JSON_VALUE(CONCAT(N'["', @text, N'"]'), '$[0]') AS [ChineseText]更新:
如果JSON有其他字符,则需要使用XML和\u作为分隔符拆分JSON内容:
DECLARE @text nvarchar(max)
SET @text = N'\u4e2deng\u6587eng\u5b57234\u6e2c\u8a66'
DECLARE @xml xml
SET @xml = CONCAT(STUFF(REPLACE(@text, N'\u', N'</x><x>'), 1, 4, N''), N'</x>')
SELECT
CONVERT(xml, N'<x>&#x' + LEFT(t.value('.', 'nvarchar(max)'), 4) + N';</x>').value('(/x)[1]', 'nvarchar(max)'),
STUFF(t.value('.', 'nvarchar(max)'), 1, 4, N'')
FROM @xml.nodes('/x') AS x(t)
FOR XML PATH('')结果:
中eng文eng字234測試发布于 2021-06-11 04:28:50
有更好的练习吗?
DECLARE @Text NVARCHAR(MAX)
DECLARE @stringToSplit NVARCHAR(MAX)
DECLARE @returnList TABLE ([Name] [nvarchar] (500))
set @stringToSplit = '\u4e2d\u6587\u5b57\u6e2c\u8a66'
DECLARE @name NVARCHAR(255)
DECLARE @pos INT
WHILE CHARINDEX('\u', @stringToSplit) > 0
BEGIN
SELECT @pos = CHARINDEX('\u', @stringToSplit)
SELECT @name = SUBSTRING(@stringToSplit, 1, @pos-1)
IF @name <> ''
BEGIN
INSERT INTO @returnList
SELECT NCHAR( CONVERT(INT, CONVERT(VARBINARY,@name, 2) ) )
END
SELECT @stringToSplit = SUBSTRING(SUBSTRING(@stringToSplit, @pos+1, LEN(@stringToSplit)-@pos),2,LEN(@stringToSplit))
END
INSERT INTO @returnList
SELECT NCHAR( CONVERT(INT, CONVERT(VARBINARY,@stringToSplit, 2) ) )
select * from @returnListhttps://stackoverflow.com/questions/67930480
复制相似问题