Sql server SQL SERVER替换函数工作异常

Sql server SQL SERVER替换函数工作异常,sql-server,replace,Sql Server,Replace,为什么我只能得到一个结果 select replace(N'2',N'2','X') as Text union select replace(N'2',N'²','X') as Text 第二个SELECT语句包含一个平方 @@version=Microsoft SQL Server 2012-11.0.5623.0该行为取决于排序规则的大小写敏感度: SELECT REPLACE(N'2' COLLATE Latin1_General_CS_AS, N'2' C

为什么我只能得到一个结果

    select replace(N'2',N'2','X') as Text
    union 
    select replace(N'2',N'²','X') as Text
第二个SELECT语句包含一个平方


@@version=Microsoft SQL Server 2012-11.0.5623.0

该行为取决于排序规则的大小写敏感度:

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

当没有为文字表达式指定排序规则时,将使用数据库默认排序规则。

N'2'
必须被视为与
N'²'
相同。您确定您确实在查询中输入了一个平方吗?下面是证据
select 1,其中N'²'=N'2'
返回
1
。看起来像是在SQL SERVER中的
'²'='2'
。因此,两个选择都替换为
X
,但是
ASCII
值不同<代码>选择ASCII('²')、ASCII('2')分别返回
178
50
替换功能部分受限于您的环境。例如,ASCII码32和255(空格和不间断空格)的处理完全相同,除非特别调用。您的环境显示了一个空间,但它们不是。同样,您可能会发现在函数中使用实际的ASCII代码可以确保准确性。基本上,你确定你真的像你想的那样阅读它吗?