2015-03-19 145 views
0

當我想在我的字符串替換阿塞拜疆字符「S」「sh'.it的作品,但它也取代了‘S’與‘上海’替換字符串的字符阿塞拜疆不正確的工作

我該如何解決它。任何想法?

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

http://stackoverflow.com/questions/22409462/compare-st-with-%C5%9F-%C5%A3-in-sql-server – sqluser 2015-03-19 06:27:35

+0

它不是答案。不同的問題。請閱讀問題 – RASKOLNIKOV 2015-03-19 06:45:53

回答

0

的C haracter「ş」屬於Turkish_CI_AS。將它們插入數據庫並將它們撤回也是一個問題。訣竅是使用nvarchar並在插入和查詢時使用N.

請參考下面的例子。

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

SELECT 'ş' 

SELECT N'ş' 

輸出是如下

艾爾沙德汗賺取1000sh

小號

ş

+0

這是您的查詢 「arshhad汗earnsh 1000sh」的結果。它取代的「還與「上海」。我列類型爲nvarchar沒有必要把N的頭。所以問題不是把ñ – RASKOLNIKOV 2015-03-19 06:55:08

+0

你是什麼數據庫歸類? – RASKOLNIKOV 2015-03-19 06:59:03

+0

但在我的SQL服務器2012年,其工作和輸出如上 – 2015-03-19 06:59:24

0

研究後唯一解決方案。

它發生在兩個字符「S」和「C」,如果你想將這些字符替換其他東西它也將取代「s」和「C」。

當然,如果你的數據庫歸類爲「Turkish_CI_AS」,它會工作。但在我的情況下,只有兩個角色我不能改變它我的數據庫collat​​ion.No邏輯。

所以我的客戶只是想從我改變里人字符拉丁語「S」 - >「S」。

我的解決方案,當我開始時,我用特殊字符替換's',並在將所有azeri字符替換爲latin.so後將其放回,因此替換後我的原始'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