TO_CHAR 関数は、さまざまなデータ型の値を STRING 型に変換します。BOOLEAN、BIGINT、DECIMAL、または DOUBLE 型の値を文字列に変換します。また、指定された書式に基づいて日付の値を文字列に書式設定します。
BOOLEAN、BIGINT、DECIMAL、DOUBLE 型の変換
TO_CHAR 関数を使用して、BOOLEAN、BIGINT、DECIMAL、または DOUBLE 型の値を STRING 型に変換できます。
構文
STRING TO_CHAR(BOOLEAN|BIGINT|DOUBLE|DECIMAL <value>)
-- 標準的な例
-- 123 を返します。
SELECT TO_CHAR(123);パラメーター
value:必須。BOOLEAN、BIGINT、DECIMAL、または DOUBLE 型の値。
戻り値
STRING 型の値を返します。次のルールが適用されます:
value が BOOLEAN、BIGINT、DECIMAL、または DOUBLE 型でない場合、エラーが返されます。
value が NULL の場合、NULL が返されます。
例
基本的な例
例 1:値を STRING 型に変換します。
-- 123 を返します。 SELECT TO_CHAR(123);例 2:入力パラメーターが NULL の場合、戻り値は NULL です。
-- NULL を返します。 SELECT TO_CHAR(NULL);
日付型の変換
TO_CHAR 関数を使用して、指定された書式とタイムゾーンに基づいて、日付または時刻の値を STRING 値に書式設定できます。
構文
日付または時刻のデータ型を入力パラメーターとして使用する場合、TO_CHAR 関数は次の 2 つのシグネチャをサポートします。必要に応じてシグネチャを選択してください。
シグネチャ 1:指定された書式に基づいて、DATE または DATETIME 値を STRING 値に変換します。
STRING TO_CHAR(DATE|DATETIME <date>, STRING <format>) -- 標準的な例 -- 2025-03-05 を返します。 SELECT TO_CHAR(DATETIME '2025-03-05 14:30:00', 'yyyy-mm-dd');シグネチャ 2:指定された書式とタイムゾーンに基づいて、TIMESTAMP または TIMESTAMP_NTZ 値を STRING 値に変換します。
STRING TO_CHAR(TIMESTAMP|TIMESTAMP_NTZ <date>, STRING <format>[, STRING <time_zone>]) -- 標準的な例 -- 2025-07-20 07:30:00 を返します。 SELECT TO_CHAR(TIMESTAMP '2025-07-20 07:30:00', '%Y-%m-%d %H:%M:%S');
パラメーター
date:必須。書式設定する日付値。サポートされているデータ型は、DATE、DATETIME、TIMESTAMP、および TIMESTAMP_NTZ です。
バージョン 1.0 のデータ型エディションを使用する MaxCompute プロジェクトでは、このパラメーターが
yyyy-mm-dd hh:mi:ss形式 (例:2025-07-21 00:00:00) に一致する STRING 型である場合、暗黙的に DATETIME 型に変換されます。format:必須。出力書式を指定する STRING。次の表に、日付と時刻の部分でサポートされている書式要素を示します。
日付書式要素
%Y/yyyy/YYYY:世紀を含む年を 10 進数で表します。%y:世紀を含まない年を 10 進数で表します (00-99)。%m/mm/MM:月を 10 進数で表します (01-12)。%B:月の英語のフルネーム (例:January)。%b/%h:月の英語の短縮名 (例:Jan)。%d/dd/DD:月の日を 10 進数で表します (01-31)。%e:月の日を 10 進数で表します (1-31)。たとえば、月の 2 日目の場合、この書式は 2 を返しますが、ddは 02 を返します。%F:%Y-%m-%d(yyyy-mm-dd) と同等です。%j:年の通日を 10 進数で表します (001-366)。例:360。%u:曜日を 10 進数で表します (1-7)。月曜日が 1 です。%A:曜日の英語のフルネーム (例:Wednesday)。%a:曜日の英語の短縮名 (例:Wed)。
時刻書式要素
%p:AM または PM。%H/hh/HH:時 (24 時間時計) を 10 進数で表します (00-23)。%I:時 (12 時間時計) を 10 進数で表します (01-12)。%l:時 (12 時間時計) を 10 進数で表します (1-12)。1 桁の時には先頭にスペースが付きます。%M/mi/MI:分を 10 進数で表します (00-59)。%S/ss/SS:秒を 10 進数で表します (00-60)。%X:HH:MM:SS書式の時刻と同等です。%T:%H:%M:%S(hh-mi-ss) と同等です。ff3:ミリ秒を 3 桁の 10 進数で表します (000-999)。これは秒の小数部を表します。%E<number>S:秒の小数部の精度を<number>桁で表します。たとえば、%E3Sは00.123に一致します。%E*S:秒の完全な小数部の精度 (6 桁) を表します。例:00.123456。%Ez:数値タイムゾーン (+HH:MMまたは-HH:MM)。
time_zone:任意。タイムゾーンを指定する STRING。詳細については、「タイムゾーンリスト」をご参照ください。
タイムゾーンを指定しない場合:
date が TIMESTAMP 型の場合、デフォルトで現在のセッションまたはプロジェクトのタイムゾーンが使用されます。
date が TIMESTAMP_NTZ 型の場合、デフォルトで UTC タイムゾーンが使用されます。
戻り値
STRING 値を返します。次のルールが適用されます:
date が DATE、DATETIME、TIMESTAMP、または TIMESTAMP_NTZ 型でない場合、エラーが返されます。
date が NULL の場合、エラーが返されます。
format が NULL の場合、NULL が返されます。
例
基本的な例
例 1:入力パラメーターが DATE または DATETIME 型の場合。
-- Today is 2023-12-25. を返します。 SELECT TO_CHAR(DATE "2023-12-25", "Today is yyyy-mm-dd"); -- Today is 20231225. を返します。 SELECT TO_CHAR(DATE "2023-12-25", "Today is %Y%m%d"); -- Today is 231225Monday. を返します。 SELECT TO_CHAR(DATE "2023-12-25", "Today is %y%m%d%A"); -- Today is 12 Month 25 Day. を返します。 SELECT TO_CHAR(DATE "2023-12-25", "Today is MM Month DD Day"); -- Alibaba Finance 2010-12*03. を返します。 SELECT TO_CHAR(DATETIME '2010-12-03 00:00:00','Alibaba Finance yyyy-mm*dd'); -- The time is 15:30:00. を返します。 SELECT TO_CHAR(DATETIME '2025-07-18 15:30:00','The time is %X'); -- It is now 3:30:00 PM. を返します。 SELECT TO_CHAR(DATETIME '2025-07-18 15:30:00','It is now %l:%M:%S %p'); -- The hour part is 03. を返します。 SELECT TO_CHAR(DATETIME '2025-07-18 15:30:00','The hour part is %I'); -- Day 189 of year 25, July(Jul|Jul), day 08(8), Tuesday(Tue), 15:30:00 PM. を返します。 SELECT TO_CHAR(DATETIME '2025-07-08 15:30:00','Day %j of year %y, %B(%b|%h), day dd(%e), %A(%a), %T %p'); -- The date 2025-07-08 is the 2nd day of the week. を返します。 SELECT TO_CHAR(DATETIME '2025-07-08 15:30:00','The date %F is the %u day of the week'); -- NULL を返します。 SELECT TO_CHAR(DATE "2023-12-25", NULL);例 2:入力パラメーターが STRING 型の場合。
バージョン 1.0 のデータ型エディションを使用する MaxCompute プロジェクトでは、date パラメーターが STRING 型で、その書式が
yyyy-mm-dd hh:mi:ss形式に一致する場合、暗黙的に DATETIME 型に変換されます。-- データ型エディションを 1.0 に設定します。 SET odps.sql.type.system.odps2=false; SET odps.sql.hive.compatible=false; -- 入力パラメーターは DATETIME 形式に一致する STRING 型です。 -- 20250718 を返します。 SELECT TO_CHAR('2025-07-18 00:00:00', 'yyyymmdd');例 3:入力パラメーターが TIMESTAMP 型の場合。
パラメーターが TIMESTAMP 型の場合、タイムゾーンを指定できます。タイムゾーンを指定しない場合、デフォルトで現在のセッションまたはプロジェクトのタイムゾーンが使用されます。
-- 現在のプロジェクトのタイムゾーンは Asia/Shanghai です。 SET odps.sql.timezone=Asia/Shanghai; -- 2025-07-20 07:30:00.123456 を返します。 SELECT TO_CHAR(TIMESTAMP "2025-07-20 07:30:00.123456", "%Y-%m-%d %H:%M:%E*S"); -- 2025-07-20 07:30:00+08:00 を返します。 SELECT TO_CHAR(TIMESTAMP "2025-07-20 07:30:00", "%Y-%m-%d %H:%M:%S%Ez"); -- 2025-07-20 07:30:00 を返します。 SELECT TO_CHAR(TIMESTAMP "2025-07-20 07:30:00", "%Y-%m-%d %H:%M:%S", "Asia/Shanghai"); -- 20250720 06:30:00 を返します。 SELECT TO_CHAR(TIMESTAMP "2025-07-20 07:30:00", "yyyymmdd hh:mi:ss", "Asia/Bangkok"); -- 2025-07-20 09:30:00.123 を返します。 SELECT TO_CHAR(TIMESTAMP "2025-07-20 07:30:00.123456789", "%Y-%m-%d %H:%M:%S.ff3", "Australia/Sydney"); -- 2025-07-19 23:30:00 を返します。 SELECT TO_CHAR(TIMESTAMP "2025-07-20 07:30:00.123456", "%Y-%m-%d %H:%M:%S", "Etc/GMT"); -- 2025-07-19 23:30:00Saturday を返します。 SELECT TO_CHAR(TIMESTAMP "2025-07-20 07:30:00.123456", "%Y-%m-%d %H:%M:%S%A", "Etc/GMT"); -- NULL を返します。 SELECT TO_CHAR(TIMESTAMP "2025-07-20 07:30:00.123456", NULL, "Etc/GMT");例 4:入力パラメーターが TIMESTAMP_NTZ 型の場合。
パラメーターが TIMESTAMP_NTZ 型の場合、タイムゾーンを指定できます。タイムゾーンを指定しない場合、デフォルトで UTC タイムゾーンが使用されます。
-- The date and time is 2025-07-20 07:30:00.123456. を返します。 SELECT TO_CHAR(TIMESTAMP_NTZ "2025-07-20 07:30:00.123456" ,"The date and time is %Y-%m-%d %H:%M:%E6S"); -- 2025-07-20 07:30:00 を返します。 SELECT TO_CHAR(TIMESTAMP_NTZ "2025-07-20 07:30:00", "%Y-%m-%d %H:%M:%S", "Etc/GMT"); -- 2025-07-20 Sunday 15:30:00 を返します。 SELECT TO_CHAR(TIMESTAMP_NTZ "2025-07-20 07:30:00", "yyyy-mm-dd %A hh:mi:ss", "Asia/Shanghai"); -- 2025-07-20 14:30:00 and the millisecond part is 123. を返します。 SELECT TO_CHAR(TIMESTAMP_NTZ "2025-07-20 07:30:00.123456789", "yyyy-mm-dd hh:mi:ss and the millisecond part is ff3", "Asia/Bangkok"); -- NULL を返します。 SELECT TO_CHAR(TIMESTAMP_NTZ "2025-07-20 07:30:00", NULL);
関連関数
TO_CHAR は日付関数および文字列関数です。