SQL Like with wildcardは、特定の文字で間違った結果を返します

ジョロ

ワイルドカードでlikeキーワードを使用すると、なぜ間違った結果が得られるのか理解できません。議論のために、私の問題を説明するために小さな例を作成しました。テーブルがあるとしましょう

CREATE TABLE TestingLike(
[Name] VARCHAR(50)  
)

INSERT INTO TestingLike VALUES ('A'), ('AB'), ('L') ,('LJ')

この検索条件を使用すると

SELECT [Name] FROM TestingLike WHERE [Name] LIKE 'A%'

SELECT [Name] FROM TestingLike WHERE [Name] LIKE 'L%'

最初のクエリは(A、AB)を返し、2番目のクエリはLだけを返します不思議なことに、一時テーブルを使用している場合、これは発生しません

神の愛のために誰かがこれが起こっている理由を説明できますか、私はいくつかの調査をしましたが、答えを見つけることができませんでした、私はSQL SERVER RC12017とSQLSMSを使用しています。

お時間をいただきありがとうございます。

以下は実行計画の写真です

ここに画像の説明を入力してください

Damien_The_Unbeliever

I cannot reproduce with a Latin collation but can if I'm using a Croatian collation, because in Croatian (and some other Slavic languages1), Lj is a single distinct letter formed from two characters, and is not L followed by j. Lj (digraph) on wikipedia discusses this

You would not experience the same issue with temp tables/table variables if the collation for tempdb is different to the default collation for this specific database exhibiting the problem.

Complete/self contained repro script for those playing at home:

declare @TestingLike table(
[Name] VARCHAR(50) collate Croatian_CI_AI
)

INSERT INTO @TestingLike VALUES ('A'), ('AB'), ('L') ,('LJ')

SELECT [Name] FROM @TestingLike WHERE [Name] LIKE 'A%'

SELECT [Name] FROM @TestingLike WHERE [Name] LIKE 'L%'

これを「修正」する方法は、全体的な目標によって異なります。クロアチア語のルールで再生されている場合、コードは正しく機能しています。それ以外の場合は、データベースのデフォルトの照合順序を変更する必要があります。ただし、デフォルトの照合は、列が作成されたときにのみ適用されます。したがって、照合順序を必要なものに変更するには、既存のすべての列を変更する必要もあります。


1私は答え全体でクロアチア語を使用していますが、もちろん、「Lj有向グラフがある照合」を意味します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

間違った結果を返すSQL

分類Dev

SQL:ORとINのLIKE

分類Dev

SQL:Not Likeは、Likeの反対の結果とは異なる結果を生成します

分類Dev

SQLケース式が間違った結果を返すのはなぜですか?

分類Dev

日付を手動で入力すると、SQLの日付の違いが間違った結果を返します

分類Dev

JavaのSQLは間違ったデータを返します

分類Dev

SQL-演算子LIKEは '%'またはnullを返します

分類Dev

整数のPostgre SQL LIKE

分類Dev

SQLで「AND」操作で空の結果を取得し、「OR」操作で間違った結果を取得する

分類Dev

SQLクエリが間違った結果を返す

分類Dev

T-SQL:WHERE <>が間違った結果を返す

分類Dev

SQLが間違った結果を返す

分類Dev

単純なSQLクエリですが、間違った結果が返されました

分類Dev

'='またはLIKEを使用してSQLの文字列を比較しますか?

分類Dev

SQLクエリ-複数のCOUNTが間違った(同じ)結果を返す

分類Dev

SQLサブクエリの結果で「LIKE」を使用する

分類Dev

SQL結合テーブルは間違った結果をもたらします

分類Dev

COUNT関数がphpmyadmin sql内で間違った入力と正しい結果を返す理由

分類Dev

SQL関数は常に間違った値を返します

分類Dev

ElasticsearchはSQLと等しい%Like%

分類Dev

PL / SQLでのLIKEの使用

分類Dev

SQLでのLIKEの使用

分類Dev

C#で同等のSQL LIKE

分類Dev

LIKEでのSQLエラー

分類Dev

複数のLIKE句SQL

分類Dev

SQLリクエストが間違ったIDと間違った結果を返す

分類Dev

SQLでJOIN ON LIKE演算子を使用して結果を取得する方法

分類Dev

SQL MAX()関数が間違ったタプル/結果を返す

分類Dev

SQLクエリの結果を別のクエリのLIKE条件でどのように使用できますか?

Related 関連記事

  1. 1

    間違った結果を返すSQL

  2. 2

    SQL:ORとINのLIKE

  3. 3

    SQL:Not Likeは、Likeの反対の結果とは異なる結果を生成します

  4. 4

    SQLケース式が間違った結果を返すのはなぜですか?

  5. 5

    日付を手動で入力すると、SQLの日付の違いが間違った結果を返します

  6. 6

    JavaのSQLは間違ったデータを返します

  7. 7

    SQL-演算子LIKEは '%'またはnullを返します

  8. 8

    整数のPostgre SQL LIKE

  9. 9

    SQLで「AND」操作で空の結果を取得し、「OR」操作で間違った結果を取得する

  10. 10

    SQLクエリが間違った結果を返す

  11. 11

    T-SQL:WHERE <>が間違った結果を返す

  12. 12

    SQLが間違った結果を返す

  13. 13

    単純なSQLクエリですが、間違った結果が返されました

  14. 14

    '='またはLIKEを使用してSQLの文字列を比較しますか?

  15. 15

    SQLクエリ-複数のCOUNTが間違った(同じ)結果を返す

  16. 16

    SQLサブクエリの結果で「LIKE」を使用する

  17. 17

    SQL結合テーブルは間違った結果をもたらします

  18. 18

    COUNT関数がphpmyadmin sql内で間違った入力と正しい結果を返す理由

  19. 19

    SQL関数は常に間違った値を返します

  20. 20

    ElasticsearchはSQLと等しい%Like%

  21. 21

    PL / SQLでのLIKEの使用

  22. 22

    SQLでのLIKEの使用

  23. 23

    C#で同等のSQL LIKE

  24. 24

    LIKEでのSQLエラー

  25. 25

    複数のLIKE句SQL

  26. 26

    SQLリクエストが間違ったIDと間違った結果を返す

  27. 27

    SQLでJOIN ON LIKE演算子を使用して結果を取得する方法

  28. 28

    SQL MAX()関数が間違ったタプル/結果を返す

  29. 29

    SQLクエリの結果を別のクエリのLIKE条件でどのように使用できますか?

ホットタグ

アーカイブ