MariaDBでTO_CHARを使いこなす!書式とサンプルコードで日付・時刻・数値を自由自在に
MariaDB の TO_CHAR
関数は、日付、時刻、数値などの値を指定された書式で文字列に変換します。これは、データの表示形式を制御したり、外部システムとのデータ交換を容易にするために役立ちます。
構文
TO_CHAR(expr, format)
引数
format
: 変換後の文字列の書式を指定する文字列。書式文字列の詳細については後述します。expr
: 変換対象となる値。日付、時刻、数値などがサポートされています。
戻り値
expr
を format
で指定された書式に変換した文字列。変換に失敗した場合には 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
関数を選択する必要があります。 - 必要なフォーマット: 特定のフォーマットが必要な場合は、そのフォーマットに特化した関数やライブラリを選択する必要があります。