6

日付を渡すだけで、データベースからすべての行を選択する必要があります。たとえば、日付のあるすべての行を取得するには10/23/2012

sqlite dbでは、これをDATE列に格納します。

01/01/1900 11:00:00 AM

を使用して取得しようとしましたdate()が、日付については何も取得しません。

select itemId, date(dateColumn) from items

したがって、必要なのは日付のみを比較することだけですが、sqliteでこれを行う方法を見つけることができません。

4

4 に答える 4

9

まず、日付を ISO-8601 標準にフォーマットします。Date() でラップして、DATE として処理されるようにします。最後に、午前 0 時から翌日の午前 0 時直前までのすべてが含まれるように範囲を構成します。

select itemId, dateColumn
from items
where dateColumn >= date('2012-10-23')
  AND dateColumn <  date('2012-10-23', '+1 day')

SQLite 列は型付けされません。ただし、示されているように列を DATE と比較する場合、列データを日付に強制するだけで十分であり (強制できない場合は null)、比較は適切に機能します。

SQLFiddle の例:

create table items (
  itemid, datecolumn);
insert into items select
  1,'abc' union all select
  2,null union all select
  3,'10/23/2012 12:23' union all select
  4,'10/23/2012' union all select
  5,'2012-10-23 12:23' union all select
  6,'2012-10-23' union all select
  7,'2012-10-24 12:23' union all select
  8,'2012-10-24' union all select
  9,date('2012-10-24 12:23') union all select
  10,date('2012-10-24');

結果:

itemid  datecolumn
5       2012-10-23 12:23
6       2012-10-23

行 3 と 4は日付のように見えますが、SQLite で認識される唯一の形式である ISO-8601 形式に準拠していないため、そうではありません。

于 2012-10-22T22:23:55.987 に答える
5

SQLite には datatype はなくDATE、文字列として格納されます。したがって、文字列が等しくなるためには正確に一致する必要があります。

これは望ましくないため、日付列の値を疑似日付に「キャスト」し、引数を疑似日付にキャストして、比較できるようにする必要があります。

SELECT itemId FROM items WHERE date(dateColumn) = date("2012-10-22");

この古い質問YYYY-MM-DDへの回答でさらに説明されているように、date-command は としてフォーマットされた日付を取ることに注意してください。この質問は、 -command を使用して範囲に一致する日付を取得できることも示しています。BETWEEN x AND y

于 2012-10-22T22:24:17.553 に答える
0

dateColumn = @dateであるアイテムからitemId、dateColumnを選択します

于 2012-10-22T22:17:42.387 に答える
0
SELECT itemId,dateColumn FROM items WHERE dateColumn=date('YYYY-MM-DD HH:MM:SS');

SQLite リファレンス

于 2012-10-22T22:12:22.440 に答える