在SMSS - SQL Server Management Studio中,SQL Server在希伯来语元音上失败
我正在使用SMSS v17.3,select @@version
显示
Microsoft SQL Server 2014 - 12.0.2269.0 (X64) Jun 10 2015 03:35:45
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.1 (Build 7601: Service Pack 1)
我有以下代码
DECLARE @bbb1 NVARCHAR(50);
DECLARE @bbb2 NVARCHAR(50);
SET @bbb1 = REPLACE(N'אאא', N'א', N'ב');
SET @bbb2 = REPLACE(N'אָאָאָ', N'א', N'ב');
SELECT @bbb1;
SELECT @bbb2;
这是希伯来语字母aleph א
(\ u05D0)。这是希伯来字母下注ב
(\ u05D1)字母下面是一些标记,变音符号。当你在一封信下面看到一个时,它就在这封信后面。可以通过进入角色地图输入它们,例如找到它们。 \ u05B8并粘贴它。
如您所见,声明
set @bbb1 = REPLACE(N'אאא', N'א', N'ב');
作品
那里的任何参数都没有变音标记。
声明
set @bbb2 = REPLACE(N'אָאָאָ', N'א', N'ב');
在第一个参数中有变音符号,但它失败了。
它应该给出的结果是בָבָבָ
,即将每个aleph(א)更改为下注(ב)并保留变音符号。但它返回的是原始字符串,它什么都不替换。它在原始字符串中找不到任何aleph(א),即使它们显然在那里。
答案 0 :(得分:1)
变音符号很糟糕。此解决方案应该适用于您的目的。它创建一个临时表,声明你的字符串,从基本字符中分离重音,替换字符,然后将它们全部打碎。
DECLARE @table TABLE (letter NVARCHAR(10)) --Stage table to work with
DECLARE @letters NVARCHAR(100) = N'אָאָאָ' --string to use
DECLARE @length INT = LEN(@letters)
DECLARE @counter INT = 0
--loop to break the @letters string into rows in our stage table
WHILE @counter < @length+1
BEGIN
INSERT INTO @table
SELECT SUBSTRING(@letters, @counter, 1)
SET @counter = @counter + 1
END
--Take the rows from our stage table, replace the old char with the new char,
----and then concat them together with the accent
DECLARE @formatted_final NVARCHAR(4000)
SELECT @formatted_final = COALESCE(@formatted_final + '', '') + REPLACE(letter, N'א', N'ב')
FROM @table
SELECT @formatted_final