SQLで1日前のデータを取得する方法について、具体的なクエリ例と実践的なテクニックを解説します。データベース別の違いや注意点も含めて、より効率的なデータ抽出方法を知りたくありませんか?
SQL日付フォーマットの変換と操作方法を完全解説
SQLでの日付データの扱い方について、基本的なフォーマット変換から実践的な操作方法まで詳しく解説します。データベース開発でよく使う日付処理のテクニックを、あなたは既に把握できていますか?
SQLにおける日付データ型には主に以下の種類があります:
データ型 | 格納形式 | 用途 |
---|---|---|
DATE | YYYY-MM-DD | 日付のみを扱う場合 |
DATETIME | YYYY-MM-DD HH:MM:SS | 日付と時刻を扱う場合 |
TIMESTAMP | YYYY-MM-DD HH:MM:SS | タイムゾーン対応が必要な場合 |
基本的なデータ型の使用例を見てみましょう:
CREATE TABLE event_schedule (
id INT PRIMARY KEY,
event_date DATE,
event_datetime DATETIME,
created_at TIMESTAMP
)
DATE_FORMAT関数を使用した日付フォーマットの変換例をご紹介します:
-- 基本的な日付フォーマット
SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日') AS formatted_date
-- 時刻を含むフォーマット
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s') AS formatted_datetime
よく使用するフォーマット指定子:
指定子 | 説明 | 出力例 |
---|---|---|
%Y | 4桁の年 | 2024 |
%y | 2桁の年 | 24 |
%m | 2桁の月 | 01-12 |
%d | 2桁の日 | 01-31 |
%H | 24時間表記 | 00-23 |
%i | 分 | 00-59 |
%s | 秒 | 00-59 |
日付の加算・減算を行う場合の実装例:
-- 日付の加算
SELECT DATE_ADD(NOW(), INTERVAL 1 DAY) AS tomorrow
-- 日付の減算
SELECT DATE_SUB(NOW(), INTERVAL 1 MONTH) AS last_month
-- 日付の差分計算
SELECT DATEDIFF('2024-12-31', '2024-01-01') AS days_difference
日付処理におけるパフォーマンスを向上させるためのポイント:
CREATE INDEX idx_event_date ON event_schedule(event_date)
-- 効率的な範囲検索
SELECT * FROM event_schedule
WHERE event_date BETWEEN '2024-01-01' AND '2024-12-31'
よくある問題と解決方法:
-- タイムゾーンの設定確認
SELECT @@global.time_zone, @@session.time_zone
-- タイムゾーンの変更
SET time_zone = '+09:00'
-- 安全な日付変換
SELECT STR_TO_DATE('2024/01/01', '%Y/%m/%d')
日付フォーマットに関する実践的なTips:
SELECT
CASE
WHEN STR_TO_DATE('2024-02-30', '%Y-%m-%d') IS NULL
THEN '無効な日付'
ELSE '有効な日付'
END AS date_validation
SELECT LAST_DAY('2024-02-01') AS last_day_of_month
SELECT
DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL (MONTH(CURDATE())-1) MONTH), '%Y-%m-01') AS quarter_start,
LAST_DAY(DATE_ADD(CURDATE(), INTERVAL 2-MOD(MONTH(CURDATE())-1,3) MONTH)) AS quarter_end
これらの機能を組み合わせることで、より複雑な日付処理も実現可能です。例えば、営業日カレンダーの作成や、定期的なイベントのスケジュール管理などにも応用できます。