0

次のスクリプトで、SQL Server 2008 R2 の charindex が 0 以外の値を返すのはなぜですか?

--drop table #tmp
--go

create table #tmp (field1 nvarchar(50))
go
insert into #tmp values (N'Value 1')
go
insert into #tmp values (N'Value 2')
go
insert into #tmp values (N'Value 3')
go


DECLARE @i   INT;
DECLARE @c   NCHAR;
declare @nvc nvarchar(50) = N'Test Value';

SET @i = 128;


WHILE @i < 256
BEGIN
  SET @i = @i + 1;
  SET @c = nchar(@i);

  if exists (select 1 from #tmp t where charindex (@c, t.field1) > 0)
    print @c;
END

私のdbインスタンスで生成された出力(使用された照合:SQL_Latin1_General_CP1_CI_AS):

(1 row(s) affected)

(1 row(s) affected)

(1 row(s) affected)
²
³
¹
4

1 に答える 1

0

文字 '2' と '上付き文字 2' はどちらも 2 という同じ Unicode 数値を持っているため、SQL サーバーは見た目だけでなく、Unicode 文字のこのコンポーネントに基づいて同等の値としてそれらを扱っていると思います。

于 2013-06-28T10:27:08.947 に答える