0

私は SQLite SQL ステートメントまたはクエリを使用しています。

これまでのところ、そのような SQL ステートメントを実行するときに問題を引き起こす可能性があるスタックオーバーフローの質問をすることで、いくつかのことを理解することができました。

しかし、私はまだ結果を得ることができませんか?

ここに私のSQLクエリがあります:

SELECT * 
FROM Alarms 
WHERE ALARMSTATE IN (0,1,2) 
  AND ALARMPRIORITY IN (0,1,2,3,4) 
  AND ALARMGROUP IN (0,1,2,3,4,5,6,7) 
  AND DateTime(ALARMTIME) BETWEEN datetime("2012-08-02 00:00:00") 
                    AND datetime("2012-08-03 00:00:00") 
ORDER BY ALARMTIME DESC

以下は、datagridView コントロール内で表示されたテーブルです。 ご覧のとおり、テーブルには昨日と一昨日のレコードがあります。

ここに画像の説明を入力

データ型が TEXT である ALARMTIME などの形式の問題があるすべての列を修正しました。それでも結果が得られないので、以下のように SQLite Administrator アプリケーション内から直接 SQL ステートメントを実行することにしました。驚いたことに、データセットに対して何もないか、nill または null である同じ結果が得られました。ただし、SQLite Administrator は、DateTime が TEXT ではなく TIMESTAMP のみをパラメーターとして受け入れることを示しました。もしそうなら、他のすべてが正しいとしても、上記の SQL ステートメントは機能しません。そう言うのは正しいですか?

ここに画像の説明を入力

4

2 に答える 2

1

これが私の答えです。私が理解していることから、DATETIME は文字列またはタイムスタンプをパラメーターとして受け取ることになっていますが、私の場合はうまくいきません。

私の列 ALARMTIME は TEXT であるため、次の SQL ステートメントを使用してテーブルにクエリを実行し、探しているデータセットを取得できます。

SELECT *
FROM Alarms
WHERE ALARMSTATE IN (0,1,2)
  AND ALARMPRIORITY IN (0,1,2,3,4)
  AND ALARMGROUP IN (0,1,2,3,4,5,6,7)
  AND ALARMTIME LIKE "2012/08/01%"
  ORDER BY ALARMTIME DESC

ALARMTIME テキストを日時型に変換できません。

于 2012-08-06T14:00:10.953 に答える
0

8/1 から 8/3 の間で試してみると、8/2 のものを取得できます。

あなたがそれを持っている方法は、2回の間にアラームを引き上げる必要があります

編集

フォーマットALARMTIMEに変更できますか?DATETIME次に、Between を使用できるようになり、テキストを に変換する必要がなくなりますDATETIME

型に変換するDATETIMEと、クエリの柔軟性が向上します。今後も使いやすくなります。

それDATETIMEはオーバーロードされたテキスト型だと思うので、テキストを出力する必要があります

于 2012-08-03T19:55:58.373 に答える