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代码可以确保准确性。基本上,你确定你真的像你想的那样阅读它吗?