2016-08-27 43 views
2

爲什麼我只能得到一個結果?SQL SERVER替換函數工作奇數

select replace(N'2',N'2','X') as Text 
    union 
    select replace(N'2',N'²','X') as Text 

第二個SELECT語句包含一個平方。

@@版本=的Microsoft SQL Server 2012 - 11.0.5623.0

+0

'N'2''必須得到與'N'²''相同的對待。 –

+0

你確定你真的進入了查詢的平方嗎? –

+0

這裏是證明'選擇1,其中N'²'= N'2''返回'1'。看起來像SQL SERVER''2'='2'。所以這兩個選擇都用'X'替換。 –

回答

3

行爲取決於歸類的區分大小寫:

SELECT REPLACE(N'2' COLLATE Latin1_General_CS_AS, N'2' COLLATE Latin1_General_CS_AS,'X' COLLATE Latin1_General_CS_AS) as Text 
UNION 
SELECT REPLACE(N'2' COLLATE Latin1_General_CS_AS, N'²' COLLATE Latin1_General_CS_AS,'X' COLLATE Latin1_General_CS_AS) as Text 
GO 
--results: 
X 
2 
SELECT REPLACE(N'2' COLLATE Latin1_General_CI_AS, N'2' COLLATE Latin1_General_CI_AS,'X' COLLATE Latin1_General_CI_AS) as Text 
UNION 
SELECT REPLACE(N'2' COLLATE Latin1_General_CI_AS, N'²' COLLATE Latin1_General_CI_AS,'X' COLLATE Latin1_General_CI_AS) as Text 
GO 
--results: 
X 

當文字表述沒有指定整理,數據庫默認排序規則被使用。