3
create table #temp(name nvarchar(10))
insert into #temp values('one')
select * from #temp where name = 'one'
select * from #temp where name = 'one ' --one with space at end
drop table #temp

上記では、名前に nvarchar を使用しました。私の要件は、最初の選択クエリに対して結果が存在する必要があり、2 番目のクエリに対して返されるべきではないということです。名前をトリミングしないでください。SQL Server でこれに使用できるデータ型を教えてください。

4

1 に答える 1

1

この問題を解決できるデータ型ではありません。この記事を参照する必要があります: INF: SQL Server が文字列と末尾のスペースを比較する方法

SQL Server は、文字列をスペースと比較する方法について、ANSI/ISO SQL-92 仕様 (セクション 8.2、一般規則 #3) に従います。ANSI 標準では、比較に使用する文字列を比較する前に長さが一致するように、文字列のパディングが必要です。パディングは、WHERE 句と HAVING 句の述語、およびその他の Transact-SQL 文字列比較のセマンティクスに直接影響します。たとえば、Transact-SQL では、文字列 'abc' と 'abc ' はほとんどの比較操作で同等であると見なされます。

これを克服する方法はいくつかありますが、その 1 つは を使用することLikeです。

select * from #temp where name like 'one ' --one with space at end

これは結果を返しません。

AnthonyBloeschによる次のブログ投稿が表示されます。

于 2012-09-18T09:01:22.977 に答える