Oracle SQL 関数 : TO_MULTI_BYTE,TO_SINGLE_BYTE : マルチバイト・シングルバイト変換

 strRet := TO_MULTI_BYTE ( strSrc );
 strRet := TO_SINGLE_BYTE( strSrc );

 strSrc をマルチバイト、またはシングルバイトに変換した文字列を返します。

  半角カタカナの文字は全角には変換されません。
  (半角カタカナは内部的にはマルチバイト表現のため)


私の Oracle の環境は文字コードが Shift-JIS なのですが、関数の使用例を示します。

SQL> SELECT VALUE FROM NLS_DATABASE_PARAMETERS
  2  WHERE PARAMETER='NLS_CHARACTERSET' ;

VALUE
--------------------------------------------------------------------------------
JA16SJIS

SQL> SET LINESIZE 128
SQL> SELECT
  2   TO_MULTI_BYTE('ABC')           AS "'ABC'"
  3  ,TO_MULTI_BYTE('123,456.789')   AS "'123,456.789'"
  4  ,TO_MULTI_BYTE('ハンカク')          AS "'ハンカク'"
  5  ,TO_MULTI_BYTE('全角文字')      AS "'全角文字'"
  6  FROM DUAL;

'ABC'        '123,456.789'                                'ハンカク'   '全角文字'
------------ -------------------------------------------- -------- ----------------
ABC       123,456.789                       ハンカク     全角文字

3番目の「ハンカク」はそのままの文字列が戻されることが分かります。

この関数はいわゆる ASCII 文字を全角にする場合に使うぐらいしか用途が無いようです。

以下は TO_SINGLE_BYTE の例を示します。

SQL> SELECT
  2   TO_SINGLE_BYTE('ABC')                 AS "'ABC'"
  3  ,TO_SINGLE_BYTE('123,456.789') AS "'123,456.789'"
  4  ,TO_SINGLE_BYTE('ハンカク')                   AS "'ハンカク'"
  5  ,TO_SINGLE_BYTE('全角文字')               AS "'全角文字'"
  6  FROM DUAL;

'AB  '123,456.78  'ハンカク'   '全角文字'
------ ---------------------- -------- ----------------
ABC    123,456.789            ハンカク     全角文字