替换字符串中的阿塞拜疆字符不正确

时间:2015-03-19 06:21:58

标签: sql sql-server sql-server-2008 replace collation

当我想用'sh'替换我的字符串中的阿塞拜疆字符'ş'时,它会起作用,但它也会用'sh'替换's'

我如何解决它。任何想法?

REPLACE(mystring,'ş','sh')

3 个答案:

答案 0 :(得分:0)

此字符表示为Unicode

http://en.wikipedia.org/wiki/%C5%9E

使用本文解决您的问题

how to insert unicode text to SQL Server from query window

此致 [R

答案 1 :(得分:0)

字符“ş”属于Turkish_CI_AS。将它们插入数据库并检索它们是一个问题。诀窍是使用nvarchar并在插入和查询时使用N.

请参阅下面的示例。

SELECT REPLACE(N'arshad khan earns 1000ş',N'ş','sh');

SELECT 'ş'

SELECT N'ş'

输出如下

arshad khan获得1000sh

取值

取值

答案 2 :(得分:0)

研究后只有解决方案。

它出现在两个字符'ş'和'ç'中,如果你想用其他东西替换这些字符,它也会取代's'和'c'。

当然,如果您的数据库排序规则是'Turkish_CI_AS',它将会起作用。但在我的情况下只有两个字符我无法更改我的数据库排序规则。其中没有逻辑。

所以我的客户只是想让我把阿塞拜疆的角色改成拉丁'ş' - >'s'。

我的解决方案当我开始用特殊字符替换's'并在将所有的azeri字符替换为latin后将其放回原位。所以我的原始'c'和's'字符在替换后不会生效。

这是我写的一个功能

Create FUNCTION [dbo].[funRGMReplaceAzeriCharacters] 
(           
    @string nvarchar (MAX)
)  
RETURNS varchar(MAX)
AS  
BEGIN 

DECLARE 
    @Result nvarchar(MAX)
    Begin 

    SET @Result=REPLACE(@string,'s' ,'V1986Q')

    SET @Result=REPLACE(@Result,'c' ,'V1987Q')

    SET @Result=REPLACE(@Result,'ı' ,'i')

    SET @Result=REPLACE(@Result,'ə','a')

    SET @Result=REPLACE(@Result,'ğ','g')

    SET @Result=REPLACE(@Result,'ü','u')

    SET @Result=REPLACE(@Result,'ş','sh')

    SET @Result=REPLACE(@Result,'ç','ch')

    Set @Result=REPLACE(@Result,'ö','o')

    -- bring back s and c

    Set @Result=REPLACE(@Result,'V1986Q','s')

    Set @Result=REPLACE(@Result,'V1987Q','c')
    END    
   RETURN UPPER (@Result)
END