SQL 時間の扱い方

これをマスター

SQLでの時間の扱い方 NOW や DATEADD などをマスターしましょう!

マスター 現在の時間から(動的に)過去2ヶ月コーヒーを買ってくれたお客さんを探す事が出来る

はじめに

SQLでの時間の取り扱いは、文字列や数字に比べて少しトリッキーだったりします
文字や数字は今日でも明日でも10は十ですが
時間だと、今日は今日ですが、明日の今日は今の明日になります

上司に「今日までの売上データ取っといて」と4/1に言われたとします
(簡略化しますが)データをとるのに、WHERE [売上日]=’4/1′ のクエリを作ったとします
後日、上司に「この前のデータいつでも見れるようにして」と言われたら
日付は「いつでも」に自動で合うようにならないとですね
Excelでも似たケースでファイルを開いた時に更新されるようにしますが
SQLだとクエリが動いた時刻をとる NOW() などの関数を組み合わせて作るのが一般的です

演算子 説明 使用例  使用例の説明
GETDATE() 現在の時刻 – MicrosoftSQLサーバー [販売日] > DATEADD(month, -1, GETDATE() ) 販売日が現在のデータ
SYSDATE() 現在の時刻 – ORACLE [販売日] > DATEADD(month, -1, SYSDATE() ) 販売日が現在のデータ
NOW() 現在の時刻 – MySQL [販売日] > DATEADD(month, -1, NOW() ) 販売日が現在のデータ
DATEADD 日付時刻を追加・差分 [販売日] > DATEADD(month, -3, NOW) 販売日が現在より3ヶ月前
DATEDIFF 日付の差を指定した単位で DATEDIFF(month,[販売日],’03/01′) [販売日]と3/1の差が何ヶ月か

サンプル

販売日が1/1から現在までのデータをとってくる場合

 テーブル名: product
商品番号 カテゴリー 商品名 サイズ 価格 販売日
1 P1001 コーヒー ドリップコーヒー ショート 290 2021/01/01
2 P1002 コーヒー ドリップコーヒー トール 330 2021/02/01
3 P1003 コーヒー ドリップコーヒー グランデ 370 2021/03/01
4 P1004 コーヒー ドリップコーヒー ベンティ 410 2021/04/01

GETDATE, SYSDATE, NOW

現在の時刻・日付をとってきます
使うデータベースによりコマンドが違ってきます
GETDATEはMicrosoftSQLサーバー、SYSDATEはOracle、NOWはMySQLで使用されます
レポートなど動的に、日付を使うケースで使われます

(SQLiteはデータタイプには日時の考え方が無いので時間は一般的に文字列として扱われます)

DATEADD

DATEADD(単位, 数, 日時)
DATEADDは3つの値をとります
「日時」に「数」「単位」を足す、というコマンドです

単位は、下記の一覧の値を指定します
数は、数を指定します
日時は、元になる日時を指定します

よく使うパターンとしては
DATEADD(month, 3, GETDATE() ) : 「現在から3ヶ月後」
DATEADD(month, -3, GETDATE() ) : 「現在から3ヶ月前」
DATEADDはAdd(追加)するコマンドなので
3ヶ月前のように、引算する場合はマイナスの数(この場合-3)を指定してあげます

単位 説明
year ,yy, yyyy
month ,mm, m
day ,dd, d
hour ,hh
minute ,mi, n
second ,ss, s

DATEDIFF

DATEDIFF(単位, 日時A, 日時B)
DATEDIFFは3つの値をとります
「日時A」と「日時B」の「単位」差を出す、というコマンドです

DATEDIFF(day, ’12/31′, GETDATE())
とすると年末までの残りの日数がとれます
DATEDIFF(week, ’12/31′, GETDATE())
とすると年末までの残り何週かがとれます

クイズ


下記のテーブルから
「過去2ヶ月で、5000円以上で、商品名に「ドリップ」を含んだ商品を買ってくれたお客さん」を探してみてください



 テーブル名: product
顧客番号 氏名 商品名 サイズ 価格 販売日
1 C1001 真弓あきこ ドリップコーヒー – ダークロースト ショート 2900 2021/01/01
2 C1002 北村てるこ ドリップコーヒー – ダークロースト トール 3300 2021/02/01
3 C1003 ランディばす ドリップコーヒー – ダークロースト グランデ 9700 2021/03/01
4 C1004 掛布まさこ ドリップコーヒー – ダークロースト ベンティ 8100 2021/04/01
5 C1010 岡田あきこ カフェミスト ショート 3400 2021/01/01
6
C1011
佐野のりこ カフェミスト トール 5400 2021/02/01
7 C1012 平田かつこ カフェミスト グランデ 9290 2021/03/01
8 C1013 吉竹てるこ カフェミスト ベンティ 4600 2021/04/01


あわせてご覧ください

EXCEL DATEDIF

Excel

Excel EOMONTHの使い方を分かりやすい例で紹介

Read More

SQL UPDATE

SQL

SQL Tips

Read More

SQL DELETE

SQL

SQL Tips

Read More