私は単純な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 "を指定しないでください。
文字列を照会するときに一重引用符を使用します。 'LIKE'(' Do LIKE '%h%' ')でクエリを実行して、' h 'のまわりの予期しない空白のためではないことを確認してください。ビンゴ。 – Glenn
。私の二重引用符はどこでもうまくいきました。先行/末尾の空白はありませんが、一重引用符で囲まれたクエリも同様に動作し、現在の "h"または "h"でも動作します。だから今興味をそそるのは、二重引用符と一重引用符を入れ替えることができますが、単独の "h"だけで(?)、両者は交換できません。 – ABA
"時間"の "%H"はおそらくこれの原因で、SQLite開発者は "%"の有無にかかわらず、 "h"または "H"のケースを予見していますが、二重引用符そのため、SQLiteはそれらを(空の)時間値と混合します。この二重引用符をすべて単一のものに変更して、このような問題を回避しました。シングルクォートのヒントを入れると、うまく答えを受け入れることができます。ありがとうございました! – ABA