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)