1

私の「タスク」データベーステーブルは次のようになります。

[title] [content] [start_date] [end_date]
[...] [...] [01.06.2010 20:10:36] [06.06.2010 20:10:36]
[...] [...] [05.06.2010 20:10:36] [06.06.2010 20:10:36]

そして、特定の日が start_date と end_date の間にあるという条件を満たすレコードのみを検索したいと考えています。

次のSQL式を試しました:

SELECT * FROM task WHERE
strftime ('%d', start_date) <= @day
AND
@day <= strftime ('%d', end_date)

@day は SQLiteParameter です (式 5)。しかし、結果は返されません。

どうすればこの問題を解決できますか?

ありがとう。

4

4 に答える 4

1

SQLite3 でデータと時刻を操作する関数は、テーブル列のようなパラメーターを受け入れないようです。文字列のみが必要です。しかし代わりに、文字列を使用してデータの比較を行うことができます。

例:

SELECT * FROM table WHERE
table_column> = "06.25.2010 00:00:00"
AND
table_column <"06.25.2010 23:59:59"

これは私にとってはうまくいきます。

于 2010-06-25T16:33:18.563 に答える
1
SELECT *
FROM task
WHERE @day BETWEEN date(start_date) and date(end_date)
于 2010-06-06T22:47:32.223 に答える
0

文字列が作成されるため、列名を一重引用符で囲むことはできません。代わりに二重引用符を使用できます。この場合、引用符はまったく必要ありません。代わりにこれを試してください:

SELECT *
FROM task
WHERE strftime('%d', start_date) <= @day
AND @day <= strftime('%d', end_date)

またはおそらくあなたはこれを意味します:

SELECT *
FROM task
WHERE date(start_date) <= @day
AND @day <= date(end_date)
于 2010-06-03T17:57:54.420 に答える
0

待って、意図したクエリを誤解しました。これはうまくいくはずです:

SELECT * FROM task WHERE
strftime ('%d', start_date) <= @day
AND
@day <= strftime ('%d', end_date)

@day が実際には 2 桁のテキスト タイプである場合。数値型で動作するには、次を使用します。

SELECT * FROM task WHERE
CAST(strftime('%d', start_date) as integer) <= @day
AND
@day <= CAST(strftime('%d', end_date) as integer)
于 2010-06-03T17:59:01.813 に答える