4

私はこのSQLコードを持っています

declare @s varchar(8000) = 'manoeuvre'
select  CHARINDEX(char(140), @s, 0)

char(140) = ā であり、文字列 'manoeuvre' には存在しません。まだSQLサーバーは次を返します

4 (この行に char(140) があることを示します)

「Œ」を「*」に置き換えると、

マン*ウブレ

SQL が 'o' と 'e' を 1 文字に置き換えたようですが、なぜですか? 'oe' を 'ā' に置き換えるのはなぜですか?

文字列 'mass' と 'ß' で同じ効果が見られます (これは double のドイツ語だと思います)。この文字を置換すると、文字列「ma*」が返されます。

SQL は隠れて何か「賢い」ことをしようとしていますか?

追加情報を編集:

SQL サーバー 2008 R2。

データベースの照合順序は、Latin1_General_CI_AS です。

4

1 に答える 1

3

その記号(ASCII 140)を調べると、次のように記述されています

大文字の OE 合字

たとえば、www.table-ascii.comを参照してください。

試す

select  CHARINDEX(char(140), @s COLLATE Latin1_General_BIN, 0)

二分探索を行います。

于 2012-06-06T14:18:50.383 に答える