Top > SQL 関数一覧 (T‐Z) > TO_MULTI_BYTE、TO_SINGLE_BYTE

全角文字列を半角にする、半角文字列を全角にする

正確にはシングルバイト文字列とマルチバイト文字列の変換。

syntax

  • TO_MULTI_BYTE ( string )
  • TO_SINGLE_BYTE ( string )

return [ char | varchar2 | nchar | nvarchar2 ]

parameter

stringマルチバイト(全角)、または、シングルバイト(半角)に変換する文字列

return

  • 全角、または、半角に変換された文字列

avail

  • SQL および PL/SQL の両方で使用可能。

TO_MULTI_BYTE 関数の内容

文字列 string に含まれるシングルバイト文字列をマルチバイト文字に変換する。半角カタカナ、全角カタカナの変換と AL16UTF16 などのマルチバイトのアスキーコードも変換されない。

TO_SINGLE_BYTE 関数の内容

文字列 string に含まれるマルチバイト文字列をシングルバイト文字に変換する。
TO_MULTI_BYTE 関数と同様に 半角カタカナ、全角カタカナの変換と AL16UTF16 などのマルチバイトのアスキーコードも変換されない。

使用できるデータ型

使用できる型は CHAR、VARCHAR2、NCHAR または NVARCHAR2。 CLOB は 暗黙変換可能な文字列長まで。

半角文字とシングルバイト文字の違い

半角文字列は表示や印刷上のサイズをゆえんとするものであり、半角文字とシングルバイト文字列は一致しない。典型的なものが半角カタカナである。
(たとえ SJIS の環境であっても)半角カタカナと全角カタカナは TO_MULTI_BYTE および TO_SINGLE_BYTE で変換できない。
シングルバイト文字は一般的にアスキーコード(キャラクタセット:US7ASCII)に含まれている文字と考えればよいだろう。

必ず アスキーコード=シングルバイト文字というわけでもない

アスキーコード表に載っているアルファベット、記号や数字でもマルチバイト文字の場合があり得る。それは AL16UTF16 を使用した場合などである。
AL16UTF16 は UTF-16 でエンコードされた UNICODE であり 'A' は 2バイトにエンコードされるため半角カナと同様にマルチバイト文字として扱われる。AL32UTF8 / UTF8 はアスキーコード表にある文字はそのまま変わらずに1バイトにエンコードされる。⇒ マルチバイト・キャラクタセット

TO_MULTI_BYTE 使用例

データベースキャラクタセットが JA16SJISTILDE の場合

SQL> select str, to_multi_byte(str) from to_multi_byte_sample;
 
STR                  TO_MULTI_BYTE(STR)
-------------------- --------------------
abc                  abc
1,234.56             1,234.56
ハンカクカタカナ             ハンカクカタカナ
+-*/                 +−*/
ゼンカクカタカナ     ゼンカクカタカナ

各国語キャラクタセットが AL16UTF16 の場合
カラム名 str は VARCHAR2(SJIS)、 カラム名 nstr は NVARCHAR2(AL16UTF16)

SQL> select str, nstr, TO_MULTI_BYTE(str), TO_MULTI_BYTE(nstr)
  2   from to_multi_byte_sample;
 
STR                  NSTR                 TO_MULTI_BYTE(STR)   TO_MULTI_BYTE(NSTR)
-------------------- -------------------- -------------------- --------------------
abc                  abc                  abc               abc
1,234.56             1,234.56             1,234.56     1,234.56
+-*/                 +-*/                 +−*/             +-*/

データベースキャラクタセットが JA16SJIS 系や JA16EUC の場合で各国語キャラクタセット AL16UTF16 の文字列を全角に変換したい場合
結果文字列を AL16UTF16 にしたい場合にはさらに TO_NCHAR(〜) のように重ねる

SQL> select nstr, TO_MULTI_BYTE(nstr), TO_MULTI_BYTE(to_char(nstr))
  2  from TO_MULTI_BYTE_SAMPLE;
 
NSTR       TO_MULTI_BYTE(NSTR)   TO_MULTI_BYTE(TO_CHAR(NSTR))
---------- --------------------- ----------------------------
abc        abc                   abc
1,234.56   1,234.56              1,234.56
+-*/       +-*/                  +−*/

TO_SINGLE_BYTE 使用例

TO_SINGLE_BYTE でも TO_MULTI_BYTE と同様に AL16UTF16 のマルチバイトのアスキーコードが望んだように変換されない。
データベースキャラクタセットが AL32UTF8 / 各国語キャラクタセットが AL16UTF16 環境の場合

SQL> select
  2    TO_SINGLE_BYTE('xyz') utf8, TO_SINGLE_BYTE(N'xyz') utf16,
  3    TO_SINGLE_BYTE(TO_CHAR(N'xyz')) utf16_to_char
  4  from dual;
 
UTF8   UTF16  UTF16_TO_CHAR
------ ------ --------------
xyz    xyz xyz

キャラクタセットが JA16SJISTILDE / AL16UTF16 環境の TO_SINGLE_BYTE のサンプル
カラム名 str は VARCHAR2(SJIS)、 カラム名 nstr は NVARCHAR2(AL16UTF16)

SQL> select str, nstr, TO_SINGLE_BYTE(str), TO_SINGLE_BYTE(nstr)
  2   from to_single_byte_sample;
 
STR                  NSTR                 TO_SINGLE_BYTE(STR)  TO_SINGLE_BYTE(NSTR)
-------------------- -------------------- -------------------- --------------------
xyz               xyz               xyz                  xyz
9、876           9、876           9、876               9、876
5,432           5,432           5,432                5,432
アイウ               アイウ               アイウ               アイウ
 


半角カタカナを全角にする ( ユーザー定義関数 TO_FULL_KANA )

半角カタカナは、TO_SINGLE_BYTE および TO_MULTI_BYTE によって変換することができない。 常にマルチバイト文字扱いと認識されている。 別途ユーザー定義関数を作成する必要がある。
半角カタカナを全角に変換する方法

SQL 関数 - TO_MULTI_BYTE,TO_SINGLE_BYTE 関連

 
アルファベット別 関数一覧 ショートカット
ABCDEFG
HILMNOP
RSTUVWX
日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ オラクルサポートセンター