文字列を違う文字コードに変換する
CONVERT ( string , dest_charset [, source_charset] )
return [ varchar2 ]
string | 変換する対象の文字列 | |
dest_charset | 変換先のキャラクタセット | |
source_charset | 変換元のキャラクタセット | default DBキャラクタセット |
- 文字コードを変換した文字列(VARCHAR2 型に格納)
CONVERT 関数の内容
変換する対象の文字列 string を 変換前の キャラクタセット source_charset から
変換後のキャラクタセット dest_charset に変更した文字列を戻す。
CONVERT 関数の追加説明と注意事項
変換文字に対応するコードポイントが存在しない場合にはクエスチョンマーク(クエッションマーク)(?) に変換される。
変換する対象の文字列 string にはラージオブジェクトも利用することが可能。
利用できる型は CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB、NCLOB の6つで LONG には使用できない。
注意
UTL_I18N パッケージの STRING_TO_RAW ファンクションは変換結果を RAW 型に代入するが CONVERT 関数は VARCHAR2 型として戻す。
文字化けする状態の VARCHAR2 型をデータベースに格納すると結果として将来データが壊れてしまう可能性がある。型本来のキャラクタセット以外の文字列を格納する場合には RAW を使用する。
CONVERT 使用例
データベースのキャラクタセットが Shift-JIS(JA16SJISTILDE) の場合の文字コードの変換
SQL> select CONVERT('あいう', 'JA16EUCTILDE') from dual;
CONVERT
------------
、「、、、ヲ ← 文字化けする
SQL> select CONVERT('あいう', 'JA16EUCTILDE', 'JA16SJISTILDE') from dual;
CONVERT
------------
、「、、、ヲ ⇒ 'あいう' (EUC-JP のため文字化けする)
変換前のキャラクタセットの名称 source_charset と入力した文字コードと一致していない場合の文字コードの変換
データベースのキャラクタセットが Shift-JIS(JA16SJISTILDE)
SQL> select CONVERT('aaa', 'JA16SJIS' ,'JA16EUCTILDE') from dual;
CONVER
------
aaa
SQL> select CONVERT('あいう', 'JA16SJIS' ,'JA16EUCTILDE') from dual;
select CONVERT('あいう', 'JA16SJIS' ,'JA16EUCTILDE') from dual
*
行1でエラーが発生しました。:
ORA-12703: このキャラクタ・セット変換はサポートされません。
文字コードの変換、そして再変換 (SJIS ⇒ EUC ⇒ SJIS)
SQL> select CONVERT(CONVERT('あいう', 'JA16EUCTILDE'),'JA16SJISTILDE', 'JA16EUCTILDE')
2 from dual;
CONVERT
------------
あいう
「あいう」⇒「、「、、、ヲ」(EUC 文字化け) ⇒ 'あいう'
PL/SQL パッケージ - CONVERT 関連
SQL 関数 - CONVERT 関連
- 文字コードから文字を取得する ⇒ chr ( s )
- 文字列を文字単位に置換する ⇒ translate ( e, f, t )
- 文字列を単語レベルで置換する ⇒ replace ( s1, s2, r )
- 文字列を反転・逆さ読みする ⇒ reverse_multi ( s )
- 数値文字列の先頭の 0 を取り除く ⇒ ltrim ( s, t )
- 文末の空白を取り除く ⇒ rtrim ( e, s )
- 文字列の長さを一定に揃える ⇒ rpad ( s1, n, s2)
- 英文字の全てを小文字に変換する ⇒ lower ( s )
- NULL を別の値に変換する ⇒ nvl ( e1, e2 )
- 文字列同士を結合する ⇒ concat ( s1, s2 )
- 半角カナを全角かなに変換する ⇒ to_full_kana ( s, t )
- 全角空白と半角スペースを取り除く ⇒ trim_multi ( s, r )