CAST converte o valor de um tipo de dado para outro, e fornece tipo de dado para o parâmetro dinâmico (?) e para o valor NULL.
As expressões CAST são permitidas em qualquer lugar onde uma expressão é permitida.
CAST ( [ Expressão | NULL | ? ] AS TipoDado)
O tipo de dado para o qual a expressão está sendo convertida é o tipo de destino. O tipo de dado da expressão a partir da qual está sendo feita a conversão é o tipo de origem.
Tipos | S |
I |
B |
D |
R |
D |
F |
C |
V |
L |
C |
V |
L |
C |
B |
D |
T |
T |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
SMALLINT | S | S | S | S | S | S | S | S | - | - | - | - | - | - | - | - | - | - |
INTEGER | S | S | S | S | S | S | S | S | - | - | - | - | - | - | - | - | - | - |
BIGINT | S | S | S | S | S | S | S | S | - | - | - | - | - | - | - | - | - | - |
DECIMAL | S | S | S | S | S | S | S | S | - | - | - | - | - | - | - | - | - | - |
REAL | S | S | S | S | S | S | S | - | - | - | - | - | - | - | - | - | - | - |
DOUBLE | S | S | S | S | S | S | S | - | - | - | - | - | - | - | - | - | - | - |
FLOAT | S | S | S | S | S | S | S | - | - | - | - | - | - | - | - | - | - | - |
CHAR | S | S | S | S | - | - | - | S | S | S | - | - | - | S | - | S | S | S |
VARCHAR | S | S | S | S | - | - | - | S | S | S | - | - | - | S | - | S | S | S |
LONG VARCHAR | - | - | - | - | - | - | - | S | S | S | - | - | - | S | - | - | - | - |
CHAR FOR BIT DATA | - | - | - | - | - | - | - | - | - | - | S | S | S | S | S | - | - | - |
VARCHAR FOR BIT DATA | - | - | - | - | - | - | - | - | - | - | S | S | S | S | S | - | - | - |
LONG VARCHAR FOR BIT DATA | - | - | - | - | - | - | - | - | - | - | S | S | S | S | S | - | - | - |
CLOB | - | - | - | - | - | - | - | S | S | S | - | - | - | S | - | - | - | - |
BLOB | - | - | - | - | - | - | - | - | - | - | - | - | - | - | S | - | - | - |
DATE | - | - | - | - | - | - | - | S | S | - | - | - | - | - | - | S | - | S |
TIME | - | - | - | - | - | - | - | S | S | - | - | - | - | - | - | - | S | S |
TIME STAMP | - | - | - | - | - | - | - | S | S | - | - | - | - | - | - | S | S | S |
Se a conversão for válida, então CAST será permitida. Incompatibilidades de tamanhos entre os tipos de origem e de destino podem causar erros em tempo de execução.
Um tipo numérico pode ser convertido para qualquer outro tipo numérico. Se o tipo de destino não puder representar o componente não-fracionário sem truncamento, será lançada uma excessão. Se o destino numérico não puder representar o componente fracionário (escala) da origem numérica, então a origem será truncada em silêncio para caber no destino. Por exemplo, converter 763.1234 para INTEGER tem como resultado 763.
As cadeias de bits podem ser convertidas para outras cadeias de bits, mas não para cadeias de caracteres. As cadeias que são convertidas para cadeias de bits são preenchidas com zero no final, para se ajustarem ao tamanho da cadeia de bits do destino. O tipo BLOB é mais limitado, e requer conversão explícita. Na maioria dos casos o tipo BLOB não pode ser convertido de, ou para, outros tipos.
Um valor data/hora sempre pode ser convertido de e para TIMESTAMP. Se DATE for convertido para TIMESTAMP, o componente TIME do TIMESTAMP resultante será sempre 00:00:00. Se um valor de dado TIME for convertido para TIMESTAMP, o componente DATE de TIMESTAMP será definido como o valor de CURRENT_DATE do momento da execução de CAST. Se TIMESTAMP for convertido para DATE, o componente TIME será truncado em silêncio. Se TIMESTAMP for convertido para TIME, o componente DATE será truncado em silêncio.
SELECT CAST (MILHAS AS INT) FROM VÔOS -- converter de carimbo do tempo para texto INSERT INTO MINHA_TABELA (COLUNA_TEXTO) VALUES (CAST (CURRENT_TIMESTAMP AS VARCHAR(100))) -- NULL deve ser convertido para algum tipo de dado para poder ser usado SELECT LINHA_AÉREA FROM LINHAS_AÉREAS UNION ALL VALUES (CAST (NULL AS CHAR(2))) -- conversão de precisão dupla para decimal SELECT CAST (TEMPO_VÔO AS DECIMAL(5,2)) FROM VÔOS -- conversão de SMALLINT para BIGINT VALUES CAST (CAST (12 AS SMALLINT) AS BIGINT)