2016-08-27 6 views
2

結果が1つしかないのはなぜですか?SQL SERVER replace working working odd

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

2番目のSELECT文には2乗が含まれています。

@@バージョン=のMicrosoft SQL Server 2012の - 11.0.5623.0

+0

'N'2''は'N'²''と同じ扱いを受けなければなりません。 –

+0

本当にクエリに2乗を入力したことは確かですか? –

+0

ここで証明は 'select 1ここでN'² '= N'2''は' 1'を返します。 SQL Serverの ''² '=' 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 

照合がデータベース、リテラル式のために指定されていない場合デフォルト照合が使用されます。