CAST関数により値の型を他の型に変換します。また動的な引数(?)やNULL値に型を与えます。
CASTの式は式を置くことができる場所ならどこにでも置くことができます。
CAST ( [ 式 | NULL | ? ] AS データ型)
式をキャストする先のデータ型のことを目標型といいます。キャストしようとしている式のデータ型のことを源泉型といいます。
Types | S |
I |
B |
D |
R |
D |
F |
C |
V |
L |
C |
V |
L |
C |
B |
D |
T |
T |
X |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
SMALLINT | Y | Y | Y | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - |
INTEGER | Y | Y | Y | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - |
BIGINT | Y | Y | Y | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - |
DECIMAL | Y | Y | Y | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - |
REAL | Y | Y | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - |
DOUBLE | Y | Y | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - |
FLOAT | Y | Y | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - |
CHAR | Y | Y | Y | Y | - | - | - | Y | Y | Y | - | - | - | Y | - | Y | Y | Y | - |
VARCHAR | Y | Y | Y | Y | - | - | - | Y | Y | Y | - | - | - | Y | - | Y | Y | Y | - |
LONG VARCHAR | - | - | - | - | - | - | - | Y | Y | Y | - | - | - | Y | - | - | - | - | - |
CHAR FOR BIT DATA | - | - | - | - | - | - | - | - | - | - | Y | Y | Y | Y | Y | - | - | - | - |
VARCHAR FOR BIT DATA | - | - | - | - | - | - | - | - | - | - | Y | Y | Y | Y | Y | - | - | - | - |
LONG VARCHAR FOR BIT DATA | - | - | - | - | - | - | - | - | - | - | Y | Y | Y | Y | Y | - | - | - | - |
CLOB | - | - | - | - | - | - | - | Y | Y | Y | - | - | - | Y | - | - | - | - | - |
BLOB | - | - | - | - | - | - | - | - | - | - | - | - | - | - | Y | - | - | - | - |
DATE | - | - | - | - | - | - | - | Y | Y | - | - | - | - | - | - | Y | - | - | - |
TIME | - | - | - | - | - | - | - | Y | Y | - | - | - | - | - | - | - | Y | - | - |
TIMESTAMP | - | - | - | - | - | - | - | Y | Y | - | - | - | - | - | - | Y | Y | Y | - |
XML | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | Y |
変換が有効なら、CASTは可能です。源泉型と目標型の間の大きさの非互換性は、実行時にエラーを起こすことがあります。
数値型は他のいかなる数値型にも変換できます。もし数の小数部ではない部分を切り捨てなければ、変換した目標型で扱えないならば例外が発生します。もし源泉型の小数部を目標型で扱えないならば、目標型にて扱えるよう暗黙裡に源泉型の値は切り捨てられます。たとえば、763.1234をINTEGERに変換すると763となります。
ビット列の型は他のビット列の型に変換できますが、文字列に変換することはできません。 文字列の型をビット列の型に変換すると、目標のビット型の長さに会うように、末尾が0で詰められます。BLOB型はより限定されており、明示的な変換を必要とします。 ほとんどの場合、BLOB型からは/へは型変換できません。
日/時の値はいかなる場合でもTIMESTAMPへ/から型変換できます。 DATEがTIMESTAMPに型変換された場合、結果のTIMESTAMPにてTIMEの部分は常に00:00:00です。 もしTIMEがTIMESTAMPに型変換された場合、結果のTIMESTAMPにてDATEの部分は、CASTが実行されたときのCURRENT_DATEの値となります。 TIMESTAMPがDATEに型変換される場合、TIMEの部分は暗黙裡に切り捨てられます。 TIMESTAMPがTIMEに型変換される場合、DATEの部分は暗黙裡に切り捨てられます。
SELECT CAST (miles AS INT) FROM Flights -- timestampを文字列に変換する INSERT INTO mytable (text_column) VALUES (CAST (CURRENT_TIMESTAMP AS VARCHAR(100))) -- NULLを適切なデータ型に変換しなければならない。 SELECT airline FROM Airlines UNION ALL VALUES (CAST (NULL AS CHAR(2))) -- doubleをdecimalに変換する。 SELECT CAST (FLYING_TIME AS DECIMAL(5,2)) FROM FLIGHTS -- SMALLINTをBIGINTに変換する VALUES CAST (CAST (12 as SMALLINT) as BIGINT)
明示的にも暗黙的にも、XMLの値はXML以外の如何なる型へも型変換できません。XML型を文字列型にする場合は、XMLSERIALIZE 演算子を使ってください。