MariaDBでTO_CHARを使いこなす!書式とサンプルコードで日付・時刻・数値を自由自在に


MariaDB の TO_CHAR 関数は、日付、時刻、数値などの値を指定された書式で文字列に変換します。これは、データの表示形式を制御したり、外部システムとのデータ交換を容易にするために役立ちます。

構文

TO_CHAR(expr, format)

引数

  • format: 変換後の文字列の書式を指定する文字列。書式文字列の詳細については後述します。
  • expr: 変換対象となる値。日付、時刻、数値などがサポートされています。

戻り値

exprformat で指定された書式に変換した文字列。変換に失敗した場合には NULL が返されます。

書式文字列

書式文字説明
YYYY年 (4 桁)2024
YYY年 (3 桁)2024
YY年 (2 桁)24
RRRR年 (4 桁、ゼロパディング)0024
RR年 (2 桁、ゼロパディング)24
MM月 (2 桁)07
MON月 (3 文字)Jul
MONTH月 (フルネーム)July
MI分 (2 桁)00
DD日 (2 桁)07
DY曜日 (3 文字)Sun
DAY曜日 (フルネーム)Sunday
HH時 (2 桁)08
HH12時 (12 時間表記、2 桁)08
HH24時 (24 時間表記、2 桁)20
SS秒 (2 桁)47

上記の書式文字を組み合わせて、様々な形式の文字列を生成することができます。

-- 現在の日付を YYYY-MM-DD 形式で表示する
SELECT TO_CHAR(CURRENT_DATE, '%Y-%m-%d');

-- 特定の日付を ISO 8601 形式で表示する
SELECT TO_CHAR('2024-07-07', '%Y-%m-%dT%H:%i:%sZ');

-- 数値を小数点以下 2 桁まで表示する
SELECT TO_CHAR(123.456, '999.99');
  • 書式文字列には、上記以外にも様々なオプションがあります。詳細については、MariaDB のドキュメントを参照してください。
  • MariaDB の TO_CHAR 関数は、Oracle の同名関数とは一部互換性がありません。詳細については、MariaDB のドキュメントを参照してください。


-- 現在の日付を YYYY-MM-DD 形式で表示
SELECT TO_CHAR(CURRENT_DATE, '%Y-%m-%d') AS 'YYYY-MM-DD';

-- 現在の日付を MM/DD/YYYY 形式で表示
SELECT TO_CHAR(CURRENT_DATE, '%m/%d/%Y') AS 'MM/DD/YYYY';

-- 現在の日付を ISO 8601 形式で表示
SELECT TO_CHAR(CURRENT_DATE, '%Y-%m-%dT%H:%i:%sZ') AS 'ISO 8601';

-- 現在の日付を曜日を含む形式で表示
SELECT TO_CHAR(CURRENT_DATE, '%Y-%m-%d %W') AS 'YYYY-MM-DD W';

例 2:特定の日付を様々な形式で表示

-- 2024-07-07 を YYYY-MM-DD 形式で表示
SELECT TO_CHAR('2024-07-07', '%Y-%m-%d') AS '2024-07-07';

-- 2024-07-07 を MM/DD/YYYY 形式で表示
SELECT TO_CHAR('2024-07-07', '%m/%d/%Y') AS '07/07/2024';

-- 2024-07-07 を 12 時間表記で表示
SELECT TO_CHAR('2024-07-07 14:23:56', '%Y-%m-%d %h:%i:%s %p') 
AS '2024-07-07 02:23:56 PM';

例 3:数値を様々な形式で表示

-- 123.456 を小数点以下 2 桁まで表示
SELECT TO_CHAR(123.456, '999.99') AS '123.46';

-- 123.456 を科学表記で表示
SELECT TO_CHAR(123.456, '0.000e00') AS '1.235e+02';

-- 1234 をカンマ区切りで表示
SELECT TO_CHAR(1234, '9,999') AS '1,234';
  • 結果を別の列に格納したり、変数に代入したりすることもできます。
  • 上記の例では、SELECT ステートメントを使用していますが、TO_CHAR 関数は他のステートメントや式で使用することもできます。


以下に、TO_CHAR 関数の代替となる主な方法と、それぞれの利点と欠点について説明します。

フォーマット関数

MariaDB には、日付、時刻、数値をフォーマットするための様々な関数を提供しています。これらの関数は、TO_CHAR 関数よりもシンプルで読みやすく、特定の形式に特化しているという利点があります。

  • RPAD: 文字列を右側に空白で埋めます。
  • LPAD: 文字列を左側に空白で埋めます。
  • SUBSTRING: 文字列の一部を切り取ります。
  • CONCAT_WS: 文字列を連結し、間に区切り文字を挿入します。
  • TIME_FORMAT: 時刻を指定された書式で文字列に変換します。
  • DATE_FORMAT: 日付を指定された書式で文字列に変換します。

利点

  • 特定の形式に特化している
  • シンプルで読みやすい

欠点

  • 複数の関数を組み合わせる必要がある場合がある
  • TO_CHAR 関数ほど汎用性がない

CAST 関数

CAST 関数は、値の型を別の型に変換するために使用されます。文字列への変換にも使用でき、TO_CHAR 関数と同様の機能を提供します。

-- 現在の日付を YYYY-MM-DD 形式で表示
SELECT CAST(CURRENT_DATE, CHAR(10)) AS 'YYYY-MM-DD';

利点

  • 型変換とフォーマットを同時に実行できる
  • シンプルで読みやすい

欠点

  • TO_CHAR 関数ほど多くの書式オプションを提供していない

コンcatenation 演算子

コンcatenation 演算子 (+) を使用して、文字列を連結することができます。日付、時刻、数値を文字列に変換してから連結することで、TO_CHAR 関数と同様の機能を実現できます。

-- 現在の日付を YYYY-MM-DD 形式で表示
SELECT
    YEAR(CURRENT_DATE) AS 'YYYY',
    '-',
    MONTH(CURRENT_DATE) AS 'MM',
    '-',
    DAY(CURRENT_DATE) AS 'DD'
ORDER BY CONCAT(YYYY, '-', MM, '-', DD);

利点

  • 他の操作と組み合わせやすい
  • 柔軟性が高い

欠点

  • 冗長な記述になりやすい
  • 複雑で読みづらい

サードパーティ製ライブラリ

MariaDB には、日付、時刻、数値をフォーマットするための様々なサードパーティ製ライブラリが用意されています。これらのライブラリは、TO_CHAR 関数よりも高度な機能を提供する場合があります。

  • Luxon: JavaScript 製のライブラリで、日付、時刻、ゾーンの操作に特化しています。
  • Date-fns: JavaScript 製のライブラリで、日付と時刻の操作に特化しています。
  • Moment.js: JavaScript 製のライブラリで、日付と時刻の操作に特化しています。

利点

  • 多くの開発者が利用している
  • 高度な機能を提供している

欠点

  • 標準ライブラリよりもパフォーマンスが低下する可能性がある
  • 導入と設定が必要

最適な代替方法の選択

TO_CHAR 関数の代替方法は、状況によって異なります。以下の要素を考慮して、最適な方法を選択してください。

  • パフォーマンス: パフォーマンスが重要な場合は、標準ライブラリの関数を使用する必要があります。
  • 柔軟性: 柔軟性と拡張性の高いコードが必要な場合は、コンcatenation 演算子やサードパーティ製ライブラリを選択する必要があります。
  • シンプルさ: シンプルで読みやすいコードが必要な場合は、フォーマット関数や CAST 関数を選択する必要があります。
  • 必要なフォーマット: 特定のフォーマットが必要な場合は、そのフォーマットに特化した関数やライブラリを選択する必要があります。