明示的な型の変換を行なう、型のキャストを行なう

※ CAST 関数を使用しない場合でも 暗黙的な変換 が行なわれることが多い。暗黙変換が行なわれずにエラーになる関数もある。

syntax

CAST ( expr AS datatype )
CAST ( MULTISET ( query ) AS type_name )
return [ any datatype | collection ]

parameter

expr任意の組み込み型による式
datatype組み込み型の名称
query副問合せ式
type nameコレクションとなる type 型 の名称

return

  • 型をキャストしたデータ、または、TYPE にキャストした副問合せの内容

avail

  • SQL および PL/SQL の両方で使用可能。但し、PL/SQL では機能が制限される。

CAST 関数の内容(組み込みデータ型の型変換)

任意の組み込み型による 式 expr組み込みデータ型 datatype 型に変換して戻す。
TO_xxx 関数シリーズ とは異なり書式を指定することはできない。

CHAR ⇔ VARCHAR2、CHAR ⇔ CLOB、NUMBER ⇔ VARCHAR2 など、知らずに 暗黙変換 による型キャストを利用していることが多い。
良くある失敗:カラムが暗黙変換されると、そのカラムはインデックスを使用できない。

注意

PL/SQL では SQL 関数としての CAST と異なった仕様となる。

SQL> declare
  2     str varchar2(10);
  3  begin
  4     str := CAST(10 AS VARCHAR2);
  5  end;
  6  /
 
PL/SQLプロシージャが正常に完了しました。
 
SQL> declare
  2     str varchar2(10);
  3  begin
  4     str := CAST(10 AS VARCHAR2(10));
  5  end;
  6  /
        str := CAST(10 AS VARCHAR2(10));
                                  *
行4でエラーが発生しました。:
ORA-06550: 行4、列28:

CAST 使用例

CHAR 型の変換

SQL> select translate(CAST('ひらがな' as CHAR(20 byte)), ' ', '_')
  2   from dual;
 
TRANSLATE(CAST('ひらがな'ASCHAR(20BYTE)),'','_')
--------------------------------------------------------------------
ひらがな____________
 
SQL>
SQL> select translate(CAST('ひらがな' as CHAR(20 char)), ' ', '_')
  2   from dual;
 
TRANSLATE(CAST('ひらがな'ASCHAR(20CHAR))
----------------------------------------
ひらがな________________
 
SQL>

VARCHAR2 型で 文字リテラル が キャスト先の定義より長い場合

SQL> select CAST('1234567890' AS VARCHAR(5)) from dual;
 
CAST('1234
----------
12345

NUMBER 型の場合(丸め処理される)

SQL> select CAST(1.534567890 AS NUMBER(5)) from dual;
 
CAST(1.534567890ASNUMBER(5))
----------------------------
                           2

数値のオーバーフロー

SQL> select CAST(1234567890 AS NUMBER(5)) from dual;
select CAST(1234567890 AS NUMBER(5)) from dual
            *
行1でエラーが発生しました。:
ORA-01438: この列に許容される指定精度より大きな値です

文字リテラルからタイムゾーン付きタイムスタンプへ

SQL> select CAST('2000 01 01 00 00 00 +9:00' as timestamp with time zone)
  2   from dual;
 
CAST('20000101000000+9:00'ASTIMESTAMPWITHTIMEZONE)
--------------------------------------------------------------------------
00-01-01 00:00:00.000000 +09:00


SQL 関数 - CAST 関連

 
アルファベット別 関数一覧 ショートカット
ABCDEFG
HILMNOP
RSTUVWX
日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle のライセンスがわからない…
Oracle Direct (ネットで聞いても最後はここで要確認)