替换数据库中的阿拉伯字母
Replace arabic Letter in database
把单词处的字母(ي)改成(ى)时没有问题,但是把字母中间的字母(ي)改成问题?
有没有忽略字母中间的解决方案?
DECLARE @FullName VARCHAR(100)
SET @FullName = 'عبدالله عيد محمد علي'
Select @FullName, REPLACE(@FullName,'ى ','ي ')
-- عبدالله عيد محمد علي
-- عبدالله عىد محمد على
您可以结合使用 STRING_SPLIT
、STUFF
和 REVERSE
来按空格拆分字符串,然后替换每个单词中最后出现的字符。然后你可以使用 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))
把单词处的字母(ي)改成(ى)时没有问题,但是把字母中间的字母(ي)改成问题?
有没有忽略字母中间的解决方案?
DECLARE @FullName VARCHAR(100)
SET @FullName = 'عبدالله عيد محمد علي'
Select @FullName, REPLACE(@FullName,'ى ','ي ')
-- عبدالله عيد محمد علي
-- عبدالله عىد محمد على
您可以结合使用 STRING_SPLIT
、STUFF
和 REVERSE
来按空格拆分字符串,然后替换每个单词中最后出现的字符。然后你可以使用 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))