替换数据库中的阿拉伯字母

Replace arabic Letter in database

把单词处的字母(ي)改成(ى)时没有问题,但是把字母中间的字母(ي)改成问题?

有没有忽略字母中间的解决方案?

DECLARE @FullName        VARCHAR(100)
SET @FullName = 'عبدالله عيد محمد علي'

Select @FullName, REPLACE(@FullName,'ى ','ي ')

-- عبدالله عيد محمد علي

-- عبدالله عىد محمد على

您可以结合使用 STRING_SPLITSTUFFREVERSE 来按空格拆分字符串,然后替换每个单词中最后出现的字符。然后你可以使用 STRING_AGG 与空格连接回来。

DECLARE @FullName NVARCHAR(100)
SET @FullName = 'testexecution testexecution'

SELECT STRING_AGG(VALUE,' ') AS UpdatedFullName FROM
( 
SELECT STUFF(VALUE, LEN(VALUE) +1 - CHARINDEX('t', REVERSE(VALUE)), 1, 'k') AS VALUE   -- Replace last occurence of 't' with 'k'
from STRING_SPLIT(@FullName,' ')
) AS ReplacedResult

注意:这需要 SQL Server 2017 或更高版本才能工作

而且你的数据库似乎使用多种语言所以我建议使用 NVARCHAR 而不是 VARCHAR 来支持 Unicode

尝试使用它们的 Unicode 等价物

Select NCHAR(1740) as N'ي فارسي - Persian Ye', 
       NCHAR(1610) as N'ي عربي - Arabic Ye',
       NCHAR(1705) as N'ك فارسي - Persian Ke',
       NCHAR(1603) as N'ك عربي - Arabic Ke'

比如

DECLARE @FullName  NVARCHAR(100)
SET @FullName = N'عبدالله عيد محمد علي'
Select @FullName, REPLACE(@FullName, NCHAR(1610), NCHAR(1740))

有了这个输出

您可以使用以下查询,将 [Table_name][Field_name] 替换为您的变量:

update [Table_name] 
set [Field_name] = REPLACE(REPLACE(CAST([Field_name] as nvarchar(max)) ,  NCHAR(1610), NCHAR(1740)),NCHAR(1603) , NCHAR(1705))