MySQLの日付型や時刻型で使う関数のフォーマット指定子

今回は、MySQLの日付型や時刻型の関数で使うフォーマット指定子について説明します。

文字列から日付型への変換や、既存の日付データを別の形式(例:yyyymmdd→yyyy/mm/dd)に変換する場合、MySQLではフォーマット指定子で形式を指定する必要があります。

また、たとえば月の表記をゼロ埋めして2桁表示するのか、ゼロ埋めはしないのか、といった指定もフォーマット指定子の使い分けで実現することができます。

この記事では、MySQLの日付や時刻、また曜日や週番号などの用途で使用するフォーマット指定子を紹介します。

あわせて、MySQLの日付型・時刻型に関連する関数についても紹介します。

目次

MySQLの日付・時刻型のフォーマット指定子 

この章では、MySQLで文字列を日付型や時刻型データに変換するときに使用するフォーマット指定子について説明します。フォーマット指定子とはMySQLの一部の関数において、出力(変換)する日付・時刻データをどのような形式にするかを指定するために使います。

MySQLで使用する主なフォーマット指定子は下記のとおりです

MySQL:日付型のフォーマット指定子

日付型の指定子説明
%Y4桁の年2024
%m0埋めされた2桁の月03
%c0埋めなしの月3
%d0埋めされた2桁の日09
%e0埋めなしの日9

MySQL:時刻型のフォーマット指定子

時刻型の指定子説明
%H0埋めされた2桁の時間(24時間形式)09や13
%k0埋めなしの時間(24時間形式)9や13
%h、%I0埋めされた2桁の時間(12時間形式)09や01
%l0埋めなしの時間(12時間形式)9や1
%i0埋めされた2桁の分05
%s、%S0埋めされた2桁の秒03
%fマイクロ秒000000から999999
%pAMまたはPMAM

MySQL:その他のフォーマット指定子

その他の指定子説明
%W曜日名Monday
%a曜日の省略形Mon
%D日に接尾辞を付加1st, 2nd, 3rd, 4th…
%M月名January
%b月の省略形Jan
%j年の通算日001から366
%u週番号(月曜日開始)
%U週番号(日曜日開始)
%v年の週番号(月曜日開始)
%V年の週番号(日曜日開始)

※多くのフォーマット指定子では出力が英語表記になります。

%uと%Uの違い
  • %u: ISO週番号(週の始まりは月曜日)。年の最初の木曜日が含まれる週を1週目とします。
  • %U: 週番号(週の始まりは日曜日)。1月1日を含む週を1週目とします。

例:x年1月1日(金曜日)

%uを使う場合

x年の最初の木曜日は1月7日になりますので、1月1日は前年の最後の週に属します。そのため、%uでの週番号は01ではなく、前年の最後の週番号となります。

%Uを使う場合

1月1日を含む週をその年の第1週とします。1月1日が週のどの日にあっても、その週を1週目として数えます。

MySQLの日付・時刻を扱う関数 

この章では、MySQL独自の日付型・時刻型のフォーマット指定子を使う関数を説明します。

一般に、日付や時刻でフォーマット指定子を使う主要な関数は、STR_TO_DATEDATE_FORMATTIME_FORMATの3つですが、参考情報としてその他の関数も含めて紹介します。

STR_TO_DATE:文字列からの変換 

STR_TO_DATEは、文字列の情報を日付型に変換するときに使用する関数です。変換後は、MySQLの標準日付形式であるYYYY-MM-DDになります。

STR_TO_DATEの構文

文字列を日付型に変換する
STR_TO_DATE(‘文字列’, ‘フォーマット’)

第1引数・・日付データを表す文字列
第2引数・・その文字列のフォーマットを定義する形式

STR_TO_DATEの例

yyyymmdd形式からの変換
SELECT STR_TO_DATE('20240301', '%Y%m%d');
yyyy/mm/dd形式からの変換
SELECT STR_TO_DATE('2024/03/01', '%Y/%m/%d');
yyyy年mm月dd日からの変換
SELECT STR_TO_DATE('2024年03月01日', '%Y年%c月%e日');

DATE_FORMAT:指定した日付形式に変換 

DATE_TO_FORMATは、元データを指定した日付形式に変換するときに使用する関数です。

DATE_TO_FORMATは2024/03/09、または2024/3/9のように、2桁の際に0を含めるか含めないかの指定のほか、03/09/24(月/日/年)やMar-9といった、さまざまな任意の日付形式に変換することができます。

DATE_FORMATの構文

文字列を日付型に変換する
DATE_FORMAT(‘日付’, ‘フォーマット’)

第1引数・・変換したい日付データ(日付型)
第2引数・・変換後の日付のフォーマットを定義する形式

DATE_FORMATの例

yyyymmdd形式への変換
SELECT DATE_FORMAT('2024-03-01', '%Y%m%d');
yyyy/mm/dd形式への変換
SELECT DATE_FORMAT('2024-03-01', '%Y/%m/%d');
yyyy年mm月dd日への変換
SELECT DATE_FORMAT('2024-03-01', '%Y年%c月%e日');

TIME_FORMAT:指定した時刻形式に変換 

TIME_TO_FORMATは、元データを指定した時刻形式に変換するときに使用する関数です。

TIME_TO_FORMATは16:37:12、または16時37分12秒のように、さまざまな任意の時刻形式に変換することができます。また、12時間・24時間形式の指定や、時間が2桁の際に0を含めるか含めないかの指定も可能です。

TIME_FORMATの構文

文字列を日付型に変換する
TIME_FORMAT(‘時刻’, ‘フォーマット’)

第1引数・・変換したい時刻データ(時刻型)
第2引数・・変換後の時刻のフォーマットを定義する形式

TIME_FORMATの例

HH:mm:ss形式への変換
SELECT TIME_FORMAT('15:30:45', '%H:%i:%s');
h時m分s秒形式への変換
SELECT TIME_FORMAT('15:30:45', '%h時%i分%s秒');
午前/午後 h時m分への変換
SELECT TIME_FORMAT('15:30:45', '%p %h時%i分');

その他の関数

前節で紹介したSTR_TO_DATEDATE_FORMATTIME_FORMAT以外でも、日付・時刻に関連する関数には下記のようなものがあります。

UNIX_TIMESTAMPWEEKでは直接的にフォーマット指定子を使いませんが、日付・時刻型の関連関数として紹介しておきます。

FROM_UNIXTIME

UNIXタイムスタンプを日付や時刻の文字列に変換します。タイムスタンプとフォーマット指定子を引数に取り、フォーマットされた日付や時刻の文字列を返します。

SELECT FROM_UNIXTIME(1700000000, '%Y-%m-%d %H:%i:%s');

UNIX_TIMESTAMP

日付や時刻をUNIXタイムスタンプ(1970年1月1日からの秒数)に変換します。日付や時刻の文字列を引数に取り、そのUNIXタイムスタンプを返します。

SELECT UNIX_TIMESTAMP('2024-03-01 12:00:00');

WEEK

日付から週番号を抽出します。年の始まりや週の始まり(日曜日や月曜日)を指定することで、週番号を取得できます。

SELECT WEEK('2024-03-01');

あとがき 

今回は、MySQLの日付型・時刻型の関数で使用するフォーマット指定子について説明しました。

記事で取り上げたフォーマット指定子は、標準SQLではなくMySQL独自のものであるため、SQL全般の書籍などにも掲載されていない場合があります。

主要なフォーマット指定子は紹介したつもりですが、より専門性の高い用途で使用する場合には、MySQL公式のドキュメントを確認するとよいでしょう。

公式:MySQLリファレンスマニュアル

目次