在SQL Server Management Studio中,SQL Server在希伯来语变音标记上失败

时间:2018-04-19 20:16:01

标签: sql-server

在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;

enter image description here

这是希伯来语字母aleph א(\ u05D0)。这是希伯来字母下注ב(\ u05D1)字母下面是一些标记,变音符号。当你在一封信下面看到一个时,它就在这封信后面。可以通过进入角色地图输入它们,例如找到它们。 \ u05B8并粘贴它。

如您所见,声明

set @bbb1 = REPLACE(N'אאא', N'א', N'ב');

作品

那里的任何参数都没有变音标记。

声明

set @bbb2 = REPLACE(N'אָאָאָ', N'א', N'ב');

在第一个参数中有变音符号,但它失败了。

它应该给出的结果是בָבָבָ,即将每个aleph(א)更改为下注(ב)并保留变音符号。但它返回的是原始字符串,它什么都不替换。它在原始字符串中找不到任何aleph(א),即使它们显然在那里。

1 个答案:

答案 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