1. TOP
  2. ブログ
  3. Django SQL データベース 操作 まとめ 入門(5)Where条件、日付、時間

Django SQL データベース 操作 まとめ 入門(5)Where条件、日付、時間

更新日:2021年2月1日
Djangoで、モデルで定義したデータベースのテーブルからデータを取得したり操作したりする方法をDjangoの公式ドキュメントを参考にして、記載しています。
Where条件の日付、時間等についてまとめています。

環境:Python3.8.2 Django3.1.5

date:フィールドがDateFieldの場合の日付条件

フィールドがDateFieldの場合の日付条件の記載例です。

Entry.objects.filter(pub_date__date=datetime.date(2005, 1, 1))
Entry.objects.filter(pub_date__date__gt=datetime.date(2005, 1, 1))

DBによりSQLは変わるのでSQL例は記載していません。


year:フィールドがDateFieldの場合の年条件

フィールドがDateFieldの場合の年条件の記載例です。

Entry.objects.filter(pub_date__year=2005)
Entry.objects.filter(pub_date__year__gte=2005)

上記は下記SQLと同等です。

SELECT ... WHERE pub_date BETWEEN '2005-01-01' AND '2005-12-31';
SELECT ... WHERE pub_date >= '2005-01-01';

month:フィールドがDateFieldの場合の月条件

フィールドがDateFieldの場合の月条件の記載例です。

Entry.objects.filter(pub_date__month=12)
Entry.objects.filter(pub_date__month__gte=6)

上記は下記SQLと同等です。

SELECT ... WHERE EXTRACT('month' FROM pub_date) = '12';
SELECT ... WHERE EXTRACT('month' FROM pub_date) >= '6';

day:フィールドがDateFieldの場合の日付条件

フィールドがDateFieldの場合の日付条件の記載例です。
年月は含まれません。

Entry.objects.filter(pub_date__day=3)
Entry.objects.filter(pub_date__day__gte=3)

上記は下記SQLと同等です。

SELECT ... WHERE EXTRACT('day' FROM pub_date) = '3';
SELECT ... WHERE EXTRACT('day' FROM pub_date) >= '3';

week:フィールドがDateFieldの場合の週条件

フィールドがDateFieldの場合の週条件の記載例です。 例

Entry.objects.filter(pub_date__week=52)
Entry.objects.filter(pub_date__week__gte=32, pub_date__week__lte=38)

1年で週は52か53あるようです。
DBによりSQLは変わるのでSQL例は記載していません。


week_day:フィールドがDateFieldの場合の曜日条件

フィールドがDateFieldの場合の月曜日条件の記載例です。

Entry.objects.filter(pub_date__week_day=2)
Entry.objects.filter(pub_date__week_day__gte=2)

曜日は日曜日がweek_day=1で、土曜日がweek_day=7となります。
DBによりSQLは変わるのでSQL例は記載していません。


quarter:フィールドがDateFieldの場合の四半期条件

フィールドがDateFieldの場合の第2四半期条件の記載例です。

Entry.objects.filter(pub_date__quarter=2)

第2四半期は、4月1日から6月30日までとなります。
DBによりSQLは変わるのでSQL例は記載していません。


time:DateTimeFieldの場合の時間条件

時間条件の記載例です。

Entry.objects.filter(pub_date__time=datetime.time(14, 30))
Entry.objects.filter(pub_date__time__range=(datetime.time(8), datetime.time(17)))

上記は、時間が14:30の場合と 8:00~17:00の場合です。
DBによりSQLは変わるのでSQL例は記載していません。


hour:時間条件:時

時間条件の何時(hour)の記載例です。

Event.objects.filter(timestamp__hour=23)
Event.objects.filter(time__hour=5)
Event.objects.filter(timestamp__hour__gte=12)

上記は下記SQLと同等です。

SELECT ... WHERE EXTRACT('hour' FROM timestamp) = '23';
SELECT ... WHERE EXTRACT('hour' FROM time) = '5';
SELECT ... WHERE EXTRACT('hour' FROM timestamp) >= '12';

SQLはDBにより変わります。


minute:時間条件:分

時間条件の何分(minute)の記載例です。

Event.objects.filter(timestamp__minute=29)
Event.objects.filter(time__minute=46)
Event.objects.filter(timestamp__minute__gte=29)

上記は下記SQLと同等です。

SELECT ... WHERE EXTRACT('minute' FROM timestamp) = '29';
SELECT ... WHERE EXTRACT('minute' FROM time) = '46';
SELECT ... WHERE EXTRACT('minute' FROM timestamp) >= '29';

SQLはDBにより変わります。


second:時間条件:秒

時間条件の何秒(second)の記載例です。

Event.objects.filter(timestamp__second=31)
Event.objects.filter(time__second=2)
Event.objects.filter(timestamp__second__gte=31)

上記は下記SQLと同等です。

SELECT ... WHERE EXTRACT('second' FROM timestamp) = '31';
SELECT ... WHERE EXTRACT('second' FROM time) = '2';
SELECT ... WHERE EXTRACT('second' FROM timestamp) >= '31';

SQLはDBにより変わります。


B!

前の記事:Django SQL データベース 操作 まとめ 入門(4)Where条件、演算子、LIKE

次の記事:Django SQL データベース 操作 まとめ 入門(6)集計 group by(annotate,aggregate),distinct