2017-04-09 4 views
2

私は単純な1テーブルのSQLiteデータベースをいくつかのデータに使用しています。関連するレコードをさまざまなSQL文で取得します。たとえば、SQLite:フィールドに特定の値が見つからない

select * from mydb where C1 = "rc" order by P, Do, W1, W2, W3 

これらはすべて問題ありません。私は私のデシベルにダースの関連レコードを持っているという事実にもかかわらず

select * from mydb where Do = "h" order by P, Do, W1, W2, W3 

:しかし、次のクエリでは、任意のレコードを見つけることができません。

関連するレコードのいずれかでフィールド "Do"を手動で編集し、 "h"を別の文字(たとえば、 "i"(もちろん引用符なし)の場合、上記のクエリは "h"ではなく "i"で、そのレコードが検索され、手動で "i"をフィールドの "h"に戻すと、クエリでは、何も検索されません。

私は同じ結果を持ついくつかのsqliteフロントエンドで上記のsqlクエリを試しました。他の文字では、クエリは、同じレコードの代わりに、 "h"と関連するレコードを検索して表示します。

これは冗談のように聞こえるが、そうではありません。私はこれが何を引き起こす可能性があるのか​​を少しは考えていません。任意のアイデア、誰ですか?

EDIT:SQLiteでは、%Hは「時間」、HH:MMは時間/分ですが、これらのコードはどのように1つの「h」に影響しますか? SQLiteのバグ?だから私は今も、単一の "d"(可能な "日")と単一の "m"(可能な "分")で試してみましたが、それらはうまく動作します。つまり、 h "を指定しないでください。

+0

文字列を照会するときに一重引用符を使用します。 'LIKE'(' Do LIKE '%h%' ')でクエリを実行して、' h 'のまわりの予期しない空白のためではないことを確認してください。ビンゴ。 – Glenn

+0

。私の二重引用符はどこでもうまくいきました。先行/末尾の空白はありませんが、一重引用符で囲まれたクエリも同様に動作し、現在の "h"または "h"でも動作します。だから今興味をそそるのは、二重引用符と一重引用符を入れ替えることができますが、単独の "h"だけで(?)、両者は交換できません。 – ABA

+0

"時間"の "%H"はおそらくこれの原因で、SQLite開発者は "%"の有無にかかわらず、 "h"または "H"のケースを予見していますが、二重引用符そのため、SQLiteはそれらを(空の)時間値と混合します。この二重引用符をすべて単一のものに変更して、このような問題を回避しました。シングルクォートのヒントを入れると、うまく答えを受け入れることができます。ありがとうございました! – ABA

答えて

0

文字列値には一重引用符を使用します。表名と列名には二重引用符を使用します。

MySQLとの互換性のために、SQLiteは両方のコンテキストで両方の種類の引用符を許可しますが、意味が明確でない場合に限ります。 したがって、"h"は列名として解釈され、そのような列が存在しない場合にのみ文字列値として解釈されます。

文字列には常に単一引用符を使用してください。

+0

ありがとう、私は列 "H"を持っているので、これは原因ではなく、私が思ったように "時間"のコードではなく、SQLのこの単一対二重引用符のことを認識していませんでした。今私はそれを認識しています、私の誤り(私の間違った二重引用符は前にうまくいきましたので、私は問題を見ていませんでした)。(編集:申し訳ありませんが、私のupvoteはカウントされませんでした、私はそれのために必要な15点を持っていません。)また、アレキサンダーペトロフに3つのリンク、多くのありがとう! – ABA

関連する問題