TO_CHARは数値や日時を文字列へ変換するOracle SQL関数である。
DBMS | TO_CHAR |
---|---|
MySQL | ✗ |
Oracle | ✓ |
PostgreSQL | ✓ |
SQL Server | ✗ |
日付や数値をデフォルトの書式で文字列に変換する。
TO_CHAR(expr)
指定した書式で日付や数値を文字列に変換する。
TO_CHAR(expr, format)
オラクルは関数名の大文字と小文字を区別しないので、関数名は大文字(TO_CHAR)と小文字(to_char)のどちらでもよい。
TO_CHARには次の引数を指定できる。
文字列に変換する日付(DATE型)または数値(NUMBER型)を指定する。
文字列の書式を「YYYY/MM/DD」のように指定する。
書式 | 説明 |
---|---|
YYYY | 4桁の西暦年 |
YY | 西暦年の2桁 |
RR | 西暦年の2桁 |
MM | 月 |
DD | 日 |
HH | 12時間表記の時 |
HH24 | 24時間表記の時 |
MI | 分 |
SS | 秒 |
9 | 数値。正の場合は先頭に空白が付き、負の場合はマイナス記号(- )が付く。 |
0 | 数値。正の場合は先頭に空白が付き、負の場合はマイナス記号(- )が付く。桁数に足りない分は0で埋められる。 |
FM | 書式の幅になるまで先頭を0又は末尾を空白で埋める。 |
FX | 書式モデルと厳密に一致していなければエラーを発生させる。 |
書式の指定を省略した場合は、デフォルトの書式で文字列に変換される。デフォルトの書式は、変換する値のデータ型により異なる。
データ型 | デフォルトの書式 |
---|---|
DATE | NLS_DATE_FORMATパラメータに設定された書式 |
TIMESTAMP | NLS_TIMESTAMP_FORMATパラメータに設定された書式 |
TIMSTAMP WITH LOCAL TIME ZONE | |
TIMSTAMP WITH TIME ZONE | NLS_TIMESTAMP_TZ_FORMATパラメータに設定された書式 |
NUMBER | 有効桁数を保持するために十分な長さのVARCHAR2値 |
NLSパラメータは、V$NLS_PARAMETERS動的パフォーマンス・ビューを問い合わせることで確認できる。
SQL> SELECT VALUE FROM V$NLS_PARAMETERS WHERE PARAMETER = 'NLS_DATE_FORMAT';
VALUE
------------------
RR-MM-DD
SQL>
TO_CHARを使って日付を文字列に変換する例を示す。
SQL> SELECT TO_CHAR(SYSDATE, 'YYYYMMDD') FROM DUAL;
TO_CHAR(
--------
20160612
SQL>
現在の日付を「YYYY年MM月DD日」形式に変換する。なお、日本語の文言を付け加えるときは、二重引用符で括る。
SQL> SELECT TO_CHAR(SYSDATE, 'YYYY"年"MM"月"DD"日"') AS TODAY FROM DUAL;
TODAY
----------------------------------
2018年06月13日
SQL>
DATE型の日付を年月単位に集約する例を次に示す。
payment_date | payment_amount |
---|---|
2013/01/01 | 100 |
2013/01/31 | 200 |
2013/02/01 | 400 |
SELECT TO_CHAR(payment_date, 'yyyymm'), SUM(payment_amount)
FROM payment
GROUP BY TO_CHAR(payment_date, 'yyyymm')
上記の例では、payment_dateを201301や201302などでグループ化してpayment_amountを集計している。
TO_CHARを使って数値を文字列に変換する例を示す。
SQL> SELECT TO_CHAR(1,'999') FROM DUAL;
TO_CHAR(
--------
1
SQL>
負の数の場合は先頭にマイナス記号が付く。
SQL> SELECT TO_CHAR(-1, '000') FROM DUAL;
TO_CHAR(
--------
-001
SQL>
数値を0埋めするには、書式に「9」を使う。正の数の場合は、先頭に空白が付く。
SQL> SELECT TO_CHAR(1, '000') FROM DUAL;
TO_CHAR(
--------
001
SQL>
正の数の場合に先頭の空白を付けたくないときは、書式に「FM」を指定する。
SQL> SELECT TO_CHAR(1, 'FM000') FROM DUAL;
TO_CHAR(
--------
001
SQL>
TO_CHARは日付型や数値を文字列に変換する関数であるが、逆に文字列を日付型に変換するにはTO_DATE関数、文字列を数値に変換するにはTO_NUMBER関数を使う。
SQL Server に TO_CHAR 関数は無い。SQL Server で日付型を文字列に変換するには、CONVERT 又は CAST 関数を使う。
SELECT CONVERT(DATETIME, '2023-07-01');
SELECT CAST('2023-07-01' AS DATE);
Microsoft 2023. CAST および CONVERT (Transact-SQL)