日付フォーマットとは、日付を 03/15/2026 や Thursday, January 15 のような、指定したレイアウトのテキストに変換することです。データベースごとに専用の関数があり、この記事では PostgreSQL、MySQL、SQLite、SQL Server の例を紹介します。
SQL で日付をフォーマットする方法
関数に日付とフォーマット文字列を渡します。フォーマット文字列内のコードは日付の各部分を表し、それ以外の文字はそのまま出力されます。SQLite では関数は strftime() で、コードは % で始まります。
strftime(format, date)
SELECT strftime('%m/%d/%Y', '2026-03-15');
-- Output: 03/15/2026
SELECT strftime('%I:%M %p', '2026-03-15 14:30:00');
-- Output: 02:30 PM
カラムに対して使えば、同じ日付を必要なだけ異なるレイアウトで出力できます。
-- Input: orders
-- order_id | order_date
-- ---------+--------------------
-- 1 | 2026-01-15 09:42:00
-- 2 | 2026-03-02 16:05:00
SELECT
order_date,
strftime('%Y-%m-%d', order_date) AS iso_date,
strftime('%m/%d/%Y', order_date) AS us_date,
strftime('%d/%m/%Y', order_date) AS european_date
FROM orders;
-- Output:
-- order_date | iso_date | us_date | european_date
-- --------------------+------------+------------+--------------
-- 2026-01-15 09:42:00 | 2026-01-15 | 01/15/2026 | 15/01/2026
-- 2026-03-02 16:05:00 | 2026-03-02 | 03/02/2026 | 02/03/2026
よく使うコードと、2026-03-15 14:30:45 に対する出力例は次のとおりです。
| コード | 意味 | 例 |
|---|---|---|
%Y |
4桁の年 | 2026 |
%m |
月 (01-12) | 03 |
%d |
日 (01-31) | 15 |
%H |
時、24時間制 (00-23) | 14 |
%I |
時、12時間制 (01-12) | 02 |
%p |
AM または PM | PM |
%M |
分 (00-59) | 30 |
%S |
秒 (00-59) | 45 |
%w |
曜日 (0-6、日曜日が 0) | 0 |
知っておくべきルール
-
SQLite には曜日名や月名のコードがありません。
%aや%Bなどのコードを使うと、strftime()は NULL を返します。代わりにCASEで%wや%mを名前に変換してください (後述の曜日のセクションを参照)。 -
結果はテキストです。フォーマットした日付を比較・ソートすると文字列として比較されるため、年が先頭にある場合にのみ日付順と一致します。
-- Input: sales
-- id | sale_date | amount
-- ---+------------+-------
-- 1 | 2025-11-20 | 89.0
-- 2 | 2026-01-08 | 120.0
-- 3 | 2026-03-04 | 64.5
-- Wrong: '11/2025' > '02/2026' is true, because '1' > '0'
SELECT * FROM sales
WHERE strftime('%m/%Y', sale_date) > '02/2026';
-- Output:
-- id | sale_date | amount
-- ---+------------+-------
-- 1 | 2025-11-20 | 89.0
-- 3 | 2026-03-04 | 64.5
-- Right: put the year first
SELECT * FROM sales
WHERE strftime('%Y-%m', sale_date) > '2026-02';
-- Output:
-- id | sale_date | amount
-- ---+------------+-------
-- 3 | 2026-03-04 | 64.5
-
NULL を渡すと NULL が返ります。
strftime('%Y-%m-%d', NULL)は NULL を返します。'No date'など別の値を表示したい場合はCOALESCE()で囲みます。 -
絞り込みは日付で行い、フォーマットは表示用に使いましょう。
WHERE order_date >= '2026-01-01' AND order_date < '2027-01-01'とWHERE strftime('%Y', order_date) = '2026'は同じ行を返しますが、order_dateのインデックスを使えるのは前者だけです。
別の構文
PostgreSQL、MySQL、SQL Server にはそれぞれ独自の関数とコードがあります。
-- PostgreSQL: TO_CHAR(value, pattern)
-- (FM stops it padding the day name to 9 characters)
SELECT TO_CHAR(TIMESTAMP '2026-01-15 09:42:00', 'FMDay, MM/DD/YYYY HH24:MI');
-- Output: Thursday, 01/15/2026 09:42
-- MySQL: DATE_FORMAT(value, pattern)
-- (%i is the minute; %M would be the month name)
SELECT DATE_FORMAT('2026-01-15 09:42:00', '%W, %m/%d/%Y %H:%i');
-- Output: Thursday, 01/15/2026 09:42
-- SQL Server: FORMAT(value, pattern)
-- (MM is the month, mm the minute)
SELECT FORMAT(CAST('2026-01-15 09:42:00' AS datetime2), 'dddd, MM/dd/yyyy HH:mm');
-- Output: Thursday, 01/15/2026 09:42
-- Older SQL Server code uses CONVERT with a style number (101 is mm/dd/yyyy)
SELECT CONVERT(VARCHAR(10), CAST('2026-01-15' AS date), 101);
-- Output: 01/15/2026
日付をフォーマットすべき場面
日付をテキストとして表示したりグループ化したりする必要があるときにフォーマットします。ほとんどの用途は次の4つのいずれかに当てはまります。
標準的なレイアウトで日付を表示する
ファイルや API には ISO 8601 (YYYY-MM-DD)、米国の読者には MM/DD/YYYY、ヨーロッパの多くの地域には DD/MM/YYYY を使います。日付だけが必要な場合、フォーマットで時刻を省くこともできます。
月や年ごとに行をグループ化する
年なら %Y、月なら %Y-%m のように必要な部分だけを取り出し、その結果でグループ化すれば年別・月別の集計が得られます。
読みやすい日付を書く
ラベルやリマインダー、メールでは、コードと文字を組み合わせます。「2026-03-16 14:30:00」より「03/16 at 02:30 PM」のほうが読みやすくなります。
曜日を扱う
%w は曜日を 0 (日曜日) から 6 (土曜日) の数値で返します。これで絞り込めば平日や週末を抽出でき、CASE で曜日名に変換することもできます。
日付フォーマットの実例
エクスポートに ISO 8601 形式の時刻を付ける
API が 2026-03-15T08:05:12Z のようなタイムスタンプを要求しているとします。audit_log の時刻は UTC で保存されているので、コードの前後に T と Z を付けます (SQLite)。
-- Input: audit_log
-- id | action | logged_at
-- ---+--------+--------------------
-- 1 | login | 2026-03-15 08:05:12
-- 2 | export | 2026-03-15 14:30:45
-- 3 | logout | 2026-03-15 17:58:03
SELECT
id,
action,
strftime('%Y-%m-%dT%H:%M:%SZ', logged_at) AS logged_at_iso
FROM audit_log;
-- Output:
-- id | action | logged_at_iso
-- ---+--------+---------------------
-- 1 | login | 2026-03-15T08:05:12Z
-- 2 | export | 2026-03-15T14:30:45Z
-- 3 | logout | 2026-03-15T17:58:03Z
月ごとの登録者数を数える
ユーザーを登録した月でグループ化します (PostgreSQL)。YYYY-MM を使えば月が日付順に並びます。
-- Input: users
-- id | name | signup_date
-- ---+------------+------------
-- 1 | Ana Lima | 2026-01-08
-- 2 | Ben Okafor | 2026-01-27
-- 3 | Chloe Park | 2026-02-14
-- 4 | Dev Mehta | 2026-03-03
-- 5 | Elle Novak | 2026-03-30
SELECT
TO_CHAR(signup_date, 'YYYY-MM') AS month,
COUNT(*) AS signups
FROM users
GROUP BY TO_CHAR(signup_date, 'YYYY-MM')
ORDER BY month;
-- Output:
-- month | signups
-- --------+--------
-- 2026-01 | 2
-- 2026-02 | 1
-- 2026-03 | 2
予約確認メッセージを作る
確認メッセージで曜日と月を名前で表記します (SQL Server)。
-- Input: bookings
-- guest_name | booking_time
-- ------------+--------------------
-- Priya Patel | 2026-03-16 14:30:00
-- Liam Murphy | 2026-03-18 09:15:00
SELECT
guest_name,
FORMAT(booking_time, 'dddd, MMMM d') + ' at ' + FORMAT(booking_time, 'h:mm tt') AS confirmation
FROM bookings;
-- Output:
-- guest_name | confirmation
-- ------------+-------------------------------
-- Priya Patel | Monday, March 16 at 2:30 PM
-- Liam Murphy | Wednesday, March 18 at 9:15 AM
最も忙しい曜日を調べる
注文された曜日名ごとに注文数を数えます (MySQL)。
-- Input: orders
-- order_id | order_date
-- ---------+--------------------
-- 1 | 2026-03-07 10:12:00
-- 2 | 2026-03-09 16:40:00
-- 3 | 2026-03-14 11:05:00
-- 4 | 2026-03-16 09:20:00
-- 5 | 2026-03-21 13:45:00
SELECT
DATE_FORMAT(order_date, '%W') AS weekday,
COUNT(*) AS order_count
FROM orders
GROUP BY weekday
ORDER BY order_count DESC;
-- Output:
-- weekday | order_count
-- ---------+------------
-- Saturday | 3
-- Monday | 2
日付フォーマットに関する参考資料
このブログの関連記事:
-
PostgreSQL での日付フォーマットガイド:
TO_CHARのパターンをさらに紹介 - SQL DATEDIFF ガイド: 2つの日付の間隔を求める
-
SQL 日付挿入ガイド: 逆方向の変換、
STR_TO_DATE()などでテキストを日付にする - PostgreSQL で平日のみを選択する方法: 曜日での絞り込み
- SQL GROUP BY ガイド: 行を月別・年別の集計にまとめる
- SQL CASE 文ガイド: 曜日番号を名前に変換する
公式ドキュメント:
Beekeeper Studioは無料のオープンソースのデータベースGUIです
これまで使った中で最高のSQLクエリ&エディタツールです。データベースの管理に必要なものがすべて揃っています。 - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studioは高速で直感的、そして使いやすいツールです。多数のデータベースに対応し、Windows、Mac、Linuxで快適に動作します。
Beekeeper Studio 利用者の声
「Beekeeper Studio で以前の SQL ワークフローを完全に置き換えました。高速で直感的で、データベース作業がまた楽しくなりました。」
「多くのデータベース GUI を試してきましたが、Beekeeper は機能とシンプルさのバランスが絶妙です。とにかくちゃんと動きます。」