記入日:2023-02-19 編集日:2023-02-19
SQL見るだけクエリ。今回はINTERVALを使って、日時のカラムを計算する方法を考えてみようと思います。
この記事を読むと(約5分)
日時カラムに時間を増減させて計算する方法がわかります。
INTERVALの基本的な使い方は以下になります。
+(-) INTERVAL 数値 単位
INTERVALに、DATE_ADDもしくはDATE_SUBを組み合わせて値を取得できます。
DATE_ADD ---日付を加算する
DATE_SUB ---日付を減算する
加減算する単位は以下の単位を指定できます。
MONTH
WEEK
DAY
HOUR
MINUTE
SECOND
MICROSECOND
// 指定した日付の1週間後を取得する
SELECT DATE_ADD('2023/02/19', INTERVAL 1 WEEK);
--------------------------------------
2023-02-26
// 指定した日付の2週間前を取得する
SELECT DATE_SUB('2023/02/19',INTERVAL 2 WEEK);
--------------------------------------
2023-02-05
// DATE_ADD 関数でマイナスの値を指定しても減算することができます。
SELECT DATE_ADD('2023/02/19',INTERVAL -2 WEEK);
--------------------------------------
2023-02-05
SELECT DATE_ADD(CURRENT_DATE, INTERVAL 1 DAY);
--------------------------------------
明日
SELECT DATE_ADD(CURRENT_DATE, INTERVAL 2 DAY);
--------------------------------------
あさって
SELECT DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY);
--------------------------------------
昨日
SELECT DATE_SUB(CURRENT_DATE, INTERVAL 2 DAY);
--------------------------------------
おととい
以下のsql_orderテーブルには、注文商品ごとにレコードがインサートされています。
datetimeの日付に、1ヶ月を追加したカラムを追加してみようと思います。
テーブル名:sql_order
| id | order_id | name | item_id | price | quantity | size | datetime | status |
|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 伊藤 明日香 | sku-0001 | 3000 | 1 | S | 2022-12-16 07:00:00 | 1 |
| 2 | 1 | 伊藤 明日香 | sku-0002 | 2500 | 3 | S | 2022-12-16 07:00:00 | 1 |
| 3 | 1 | 伊藤 明日香 | sku-0003 | 9000 | 1 | S | 2022-12-16 07:00:00 | 1 |
| 4 | 2 | 原田 和美 | sku-0001 | 3000 | 1 | L | 2022-12-16 10:00:00 | 1 |
| 5 | 2 | 原田 和美 | sku-0002 | 2500 | 1 | L | 2022-12-16 10:00:00 | 1 |
| 6 | 2 | 原田 和美 | sku-0003 | 9000 | 2 | L | 2022-12-16 10:00:00 | 1 |
| 7 | 3 | 高橋 由美子 | sku-0001 | 3000 | 1 | M | 2022-12-16 18:00:00 | 1 |
| 8 | 3 | 高橋 由美子 | sku-0002 | 2500 | 5 | S | 2022-12-16 18:00:00 | 1 |
| 9 | 3 | 高橋 由美子 | sku-0003 | 9000 | 1 | M | 2022-12-16 18:00:00 | 1 |
| 10 | 4 | 田中 明日香 | sku-0001 | 3000 | 1 | S | 2022-12-16 22:00:00 | 1 |
| 11 | 4 | 田中 明日香 | sku-0002 | 2500 | 1 | S | 2022-12-16 22:00:00 | 1 |
| 12 | 4 | 田中 明日香 | sku-0003 | 9000 | 2 | S | 2022-12-16 22:00:00 | 1 |
| 13 | 5 | 小林 美佐子 | sku-0001 | 3000 | 1 | L | 2022-12-17 10:00:00 | 1 |
| 14 | 5 | 小林 美佐子 | sku-0002 | 2500 | 1 | L | 2022-12-17 10:00:00 | 1 |
| 15 | 5 | 小林 美佐子 | sku-0003 | 9000 | 2 | L | 2022-12-17 10:00:00 | 1 |
| 16 | 6 | 渡辺 雄一 | sku-0001 | 3000 | 1 | S | 2022-12-18 08:00:00 | 1 |
| 17 | 6 | 渡辺 雄一 | sku-0002 | 2500 | 1 | S | 2022-12-18 08:00:00 | 1 |
| 18 | 6 | 渡辺 雄一 | sku-0003 | 9000 | 1 | S | 2022-12-18 08:00:00 | 1 |
| 19 | 7 | 佐藤 智子 | sku-0001 | 3000 | 12 | M | 2022-12-18 15:00:00 | 1 |
| 20 | 7 | 佐藤 智子 | sku-0002 | 2500 | 1 | S | 2022-12-18 15:00:00 | 1 |
| 21 | 7 | 佐藤 智子 | sku-0003 | 9000 | 1 | M | 2022-12-18 15:00:00 | 1 |
| 22 | 8 | 坂本 純子 | sku-0001 | 3000 | 1 | S | 2022-12-19 20:00:00 | 1 |
| 23 | 8 | 坂本 純子 | sku-0002 | 2500 | 1 | S | 2022-12-19 20:00:00 | 1 |
| 24 | 8 | 坂本 純子 | sku-0003 | 9000 | 3 | S | 2022-12-19 20:00:00 | 1 |
| 25 | 9 | 加藤 和子 | sku-0001 | 3000 | 1 | L | 2022-12-20 10:00:00 | 1 |
| 26 | 9 | 加藤 和子 | sku-0002 | 2500 | 8 | L | 2022-12-20 10:00:00 | 1 |
| 27 | 9 | 加藤 和子 | sku-0003 | 9000 | 1 | L | 2022-12-20 10:00:00 | 1 |
| 28 | 10 | 山口 晴子 | sku-0001 | 3000 | 1 | M | 2022-12-20 19:00:00 | 1 |
| 29 | 10 | 山口 晴子 | sku-0002 | 2500 | 1 | L | 2022-12-20 19:00:00 | 1 |
| 30 | 10 | 山口 晴子 | sku-0003 | 9000 | 3 | L | 2022-12-20 19:00:00 | 1 |
さていつもの様に、テーブルの情報を取得するSQLに関して、注目する部分は、以下の9~11行目のみです。
SELECT id, name, datetime,
DATE_ADD(datetime, INTERVAL 1 MONTH) AS add_time
FROM sql_order
DATE_ADD(datetime, INTERVAL 1 MONTH)
この部分でdatetimeカラムの、1ヶ月後を計算し取得しております。
try {
include_once '../model/class.php';
// データベース接続
$database = new Database();
$db = $database->connect();
// SQLを準備し、パラメータをバインドする
$query = 'SELECT id, name, datetime,
DATE_ADD(datetime, INTERVAL 1 MONTH) AS add_time
FROM sql_order';
$stmt = $db->prepare($query);
// 実行する
$stmt->execute();
// 結果を取得する
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
print_r($result);
// データベースから切断する
$database->disconnect();
} catch(PDOException $e) {
echo $e->getMessage();
}
これを実行すると、二次元連想配列で、取得することができます。
Array
(
[0] => Array
(
[id] => 1
[name] => 伊藤 明日香
[datetime] => 2022-12-16 07:00:00
[add_time] => 2023-01-16 07:00:00
)
[1] => Array
(
[id] => 2
[name] => 伊藤 明日香
[datetime] => 2022-12-16 07:00:00
[add_time] => 2023-01-16 07:00:00
)
[2] => Array
(
[id] => 3
[name] => 伊藤 明日香
[datetime] => 2022-12-16 07:00:00
[add_time] => 2023-01-16 07:00:00
)
[3] => Array
(
[id] => 4
[name] => 原田 和美
[datetime] => 2022-12-16 10:00:00
[add_time] => 2023-01-16 10:00:00
)
[4] => Array
(
[id] => 5
[name] => 原田 和美
[datetime] => 2022-12-16 10:00:00
[add_time] => 2023-01-16 10:00:00
)
[5] => Array
(
[id] => 6
[name] => 原田 和美
[datetime] => 2022-12-16 10:00:00
[add_time] => 2023-01-16 10:00:00
)
[6] => Array
(
[id] => 7
[name] => 高橋 由美子
[datetime] => 2022-12-16 18:00:00
[add_time] => 2023-01-16 18:00:00
)
[7] => Array
(
[id] => 8
[name] => 高橋 由美子
[datetime] => 2022-12-16 18:00:00
[add_time] => 2023-01-16 18:00:00
)
[8] => Array
(
[id] => 9
[name] => 高橋 由美子
[datetime] => 2022-12-16 18:00:00
[add_time] => 2023-01-16 18:00:00
)
[9] => Array
(
[id] => 10
[name] => 田中 明日香
[datetime] => 2022-12-16 22:00:00
[add_time] => 2023-01-16 22:00:00
)
[10] => Array
(
[id] => 11
[name] => 田中 明日香
[datetime] => 2022-12-16 22:00:00
[add_time] => 2023-01-16 22:00:00
)
[11] => Array
(
[id] => 12
[name] => 田中 明日香
[datetime] => 2022-12-16 22:00:00
[add_time] => 2023-01-16 22:00:00
)
[12] => Array
(
[id] => 13
[name] => 小林 美佐子
[datetime] => 2022-12-17 10:00:00
[add_time] => 2023-01-17 10:00:00
)
[13] => Array
(
[id] => 14
[name] => 小林 美佐子
[datetime] => 2022-12-17 10:00:00
[add_time] => 2023-01-17 10:00:00
)
[14] => Array
(
[id] => 15
[name] => 小林 美佐子
[datetime] => 2022-12-17 10:00:00
[add_time] => 2023-01-17 10:00:00
)
[15] => Array
(
[id] => 16
[name] => 渡辺 雄一
[datetime] => 2022-12-18 08:00:00
[add_time] => 2023-01-18 08:00:00
)
[16] => Array
(
[id] => 17
[name] => 渡辺 雄一
[datetime] => 2022-12-18 08:00:00
[add_time] => 2023-01-18 08:00:00
)
[17] => Array
(
[id] => 18
[name] => 渡辺 雄一
[datetime] => 2022-12-18 08:00:00
[add_time] => 2023-01-18 08:00:00
)
[18] => Array
(
[id] => 19
[name] => 佐藤 智子
[datetime] => 2022-12-18 15:00:00
[add_time] => 2023-01-18 15:00:00
)
[19] => Array
(
[id] => 20
[name] => 佐藤 智子
[datetime] => 2022-12-18 15:00:00
[add_time] => 2023-01-18 15:00:00
)
[20] => Array
(
[id] => 21
[name] => 佐藤 智子
[datetime] => 2022-12-18 15:00:00
[add_time] => 2023-01-18 15:00:00
)
[21] => Array
(
[id] => 22
[name] => 坂本 純子
[datetime] => 2022-12-19 20:00:00
[add_time] => 2023-01-19 20:00:00
)
[22] => Array
(
[id] => 23
[name] => 坂本 純子
[datetime] => 2022-12-19 20:00:00
[add_time] => 2023-01-19 20:00:00
)
[23] => Array
(
[id] => 24
[name] => 坂本 純子
[datetime] => 2022-12-19 20:00:00
[add_time] => 2023-01-19 20:00:00
)
[24] => Array
(
[id] => 25
[name] => 加藤 和子
[datetime] => 2022-12-20 10:00:00
[add_time] => 2023-01-20 10:00:00
)
[25] => Array
(
[id] => 26
[name] => 加藤 和子
[datetime] => 2022-12-20 10:00:00
[add_time] => 2023-01-20 10:00:00
)
[26] => Array
(
[id] => 27
[name] => 加藤 和子
[datetime] => 2022-12-20 10:00:00
[add_time] => 2023-01-20 10:00:00
)
[27] => Array
(
[id] => 28
[name] => 山口 晴子
[datetime] => 2022-12-20 19:00:00
[add_time] => 2023-01-20 19:00:00
)
[28] => Array
(
[id] => 29
[name] => 山口 晴子
[datetime] => 2022-12-20 19:00:00
[add_time] => 2023-01-20 19:00:00
)
[29] => Array
(
[id] => 30
[name] => 山口 晴子
[datetime] => 2022-12-20 19:00:00
[add_time] => 2023-01-20 19:00:00
)
)
| id | name | datetime | add_time |
|---|---|---|---|
| 1 | 伊藤 明日香 |
2022-12-16 07:00:00 |
2023-01-16 07:00:00 |
| 2 | 伊藤 明日香 |
2022-12-16 07:00:00 |
2023-01-16 07:00:00 |
| 3 | 伊藤 明日香 |
2022-12-16 07:00:00 |
2023-01-16 07:00:00 |
| 4 | 原田 和美 |
2022-12-16 10:00:00 |
2023-01-16 10:00:00 |
| 5 | 原田 和美 |
2022-12-16 10:00:00 |
2023-01-16 10:00:00 |
| 6 | 原田 和美 |
2022-12-16 10:00:00 |
2023-01-16 10:00:00 |
| 7 | 高橋 由美子 |
2022-12-16 18:00:00 |
2023-01-16 18:00:00 |
| 8 | 高橋 由美子 |
2022-12-16 18:00:00 |
2023-01-16 18:00:00 |
| 9 | 高橋 由美子 |
2022-12-16 18:00:00 |
2023-01-16 18:00:00 |
| 10 | 田中 明日香 |
2022-12-16 22:00:00 |
2023-01-16 22:00:00 |
| 11 | 田中 明日香 |
2022-12-16 22:00:00 |
2023-01-16 22:00:00 |
| 12 | 田中 明日香 |
2022-12-16 22:00:00 |
2023-01-16 22:00:00 |
| 13 | 小林 美佐子 |
2022-12-17 10:00:00 |
2023-01-17 10:00:00 |
| 14 | 小林 美佐子 |
2022-12-17 10:00:00 |
2023-01-17 10:00:00 |
| 15 | 小林 美佐子 |
2022-12-17 10:00:00 |
2023-01-17 10:00:00 |
| 16 | 渡辺 雄一 |
2022-12-18 08:00:00 |
2023-01-18 08:00:00 |
| 17 | 渡辺 雄一 |
2022-12-18 08:00:00 |
2023-01-18 08:00:00 |
| 18 | 渡辺 雄一 |
2022-12-18 08:00:00 |
2023-01-18 08:00:00 |
| 19 | 佐藤 智子 |
2022-12-18 15:00:00 |
2023-01-18 15:00:00 |
| 20 | 佐藤 智子 |
2022-12-18 15:00:00 |
2023-01-18 15:00:00 |
| 21 | 佐藤 智子 |
2022-12-18 15:00:00 |
2023-01-18 15:00:00 |
| 22 | 坂本 純子 |
2022-12-19 20:00:00 |
2023-01-19 20:00:00 |
| 23 | 坂本 純子 |
2022-12-19 20:00:00 |
2023-01-19 20:00:00 |
| 24 | 坂本 純子 |
2022-12-19 20:00:00 |
2023-01-19 20:00:00 |
| 25 | 加藤 和子 |
2022-12-20 10:00:00 |
2023-01-20 10:00:00 |
| 26 | 加藤 和子 |
2022-12-20 10:00:00 |
2023-01-20 10:00:00 |
| 27 | 加藤 和子 |
2022-12-20 10:00:00 |
2023-01-20 10:00:00 |
| 28 | 山口 晴子 |
2022-12-20 19:00:00 |
2023-01-20 19:00:00 |
| 29 | 山口 晴子 |
2022-12-20 19:00:00 |
2023-01-20 19:00:00 |
| 30 | 山口 晴子 |
2022-12-20 19:00:00 |
2023-01-20 19:00:00 |
SQLの使いどころ
サイトに大量の情報を掲載することは、ユーザーにとってとても便利なことです。しかし、情報が多すぎると、目的の情報を見つけるのが困難になります。そのため、SQLを使用することで、情報を効率的に管理することができます。
SQLを使用することで、データベース内の情報を検索したり、フィルタリングしたりすることができます。これにより、ユーザーは目的の情報をスムーズかつ簡単に見つけることができます。
また、SQLを使用することで、データを集計したり、統合したりすることもできます。これにより、ユーザーはさまざまな視点から情報を分析することができます。つまり、サイトに多くの情報を掲載することが重要である一方で、その情報を効率的かつ簡単に管理することが求められる場合には、SQLが不可欠であるといえます。
KK
機械工学を専攻。工業デザイナーとして、国内及び海外の自動車・搬送ラインの設計などに従事した後、2003年にウェブシステム会社を設立。UI設計やウェブシステムの開発、DX化のディレクションなどを行っています。