過去 30 日間のイベントを探しています
もう 1 つの一般的なタスクは、特定の日付範囲に属する行を検索することです。原則として、範囲の開始日と終了日が固定されていれば、これは難しくありません。SQL は数値だけでなく日付も比較できます。
比較演算子は、 <、>、<=などの日付に適用できます。さらに、日付にも使用できる特別な BETWEEN 演算子もあります。たとえば、2022 年の夏に実行する必要があるすべてのタスクをタスク テーブルから選択するクエリを作成してみましょう。リクエストは次のようになります。
SELECT * FROM task
WHERE task.deadline BETWEEN '2022-06-01' AND '2022-08-31'
このクエリの結果は次のようになります。
ID | 従業員ID | 名前 | 締め切り |
---|---|---|---|
1 | 1 | フロントエンドのバグを修正 | 2022-06-01 |
2 | 2 | バックエンドのバグを修正 | 2022-06-15 |
3 | 5 | コーヒーを買う | 2022-07-01 |
4 | 5 | コーヒーを買う | 2022-08-01 |
ただし、たとえば過去 30 日間のタスクを取得したい場合は、リクエストに何を書けばよいでしょうか。過去 30 日間はクエリの実行時間に直接関係します。つまり、クエリが 7 月 25 日に実行される場合は、6 月 25 日から 7 月 24 日までの日付を選択する必要があります。日付範囲を現在時刻にバインドするにはどうすればよいですか?
これを行うには、日付追加関数を使用します。
DATE_ADD (date, INTERVAL expression units)
いくつかの例を挙げて説明するとわかりやすいと思います。
# | リクエスト | 結果 |
---|---|---|
1 | DATE_ADD('2022-06-04'、間隔 5 日) | 2022-06-09 |
2 | DATE_ADD('2022-06-04'、間隔 4 週間) | 2022-07-02 |
3 | DATE_ADD('2022-06-04'、間隔 2 か月) | 2022-08-04 |
4 | ||
5 | DATE_SUB('2022-06-04'、間隔 5 日) | 2022-05-30 |
6 | DATE_SUB('2022-06-04'、間隔 4 週間) | 2022-05-07 |
7 | DATE_SUB('2022-06-04'、間隔 2 か月) | 2022-04-04 |
ちなみに、特定の日付から特定の日、週、月、年を引くこともできます。
そして、リクエストに戻ると、過去 30 日間のデータを取得するには、この範囲内の 2 つの日付が必要になります。
- CURDATE() - 範囲の終わり
- DATE_SUB( CURDATE() , INTERVAL 30 DAY) - 範囲の開始
リクエストは次のようになります。
SELECT * FROM task WHERE task.deadline
BETWEEN DATE_SUB( CURDATE() , INTERVAL 30 DAY) AND CURDATE()
このクエリの結果は次のようになります (今日は 2022 年 6 月 4 日です)。
ID | 従業員ID | 名前 | 締め切り |
---|---|---|---|
1 | 1 | フロントエンドのバグを修正 | 2022-06-01 |
2 つの日付の差を見つける方法
そしてもう一つ便利な機能があります。場合によっては、2 つの日付の差を日数で計算する必要がある場合があります。これを行うために、SQL には特別な関数 DATEDIFF () があります。
彼女と一緒に仕事をするのはとても簡単です。
DATEDIFF (date 1, date 2)
2 番目の日付は最初の日付から単純に減算されます。date2 が date1 の後に来る場合、結果は負になります。
ちなみに、DATEDIFF() 関数を使用して前のクエリを書き直すことができます。タスク テーブルから、期限が現在の日付と 30 日以内の差があるすべてのタスクを選択する必要があります。そのリクエストは次のようになります。
SELECT * FROM task WHERE DATEDIFF(task.deadline, CURDATE() ) < 30
このクエリの結果は次のようになります (今日は 2022 年 6 月 4 日です)。
ID | 従業員ID | 名前 | 締め切り |
---|---|---|---|
1 | 1 | フロントエンドのバグを修正 | 2022-06-01 |
2 | 2 | バックエンドのバグを修正 | 2022-06-15 |
3 | 5 | コーヒーを買う | 2022-07-01 |
今回、SQL は最大 3 行を検出しました。前回は線が 1 つだったのに、今回は 3 つになった理由を考えてください。
GO TO FULL VERSION