CAST

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.

Sintaxe

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.

Convers??es CAST entre tipos de dado SQL-92

A tabela a seguir mostra as convers??es expl??citas v??lidas entre tipos de origem e tipos de destino para os tipos de dado do SQL.
Tabela 1. Convers??es expl??citas entre tipos de origem e tipos de destino para os tipos de dado do SQL. Esta tabela mostra quais convers??es expl??citas entre tipos de dado s??o v??lidas. A primeira coluna da tabela lista o tipo de origem, enquanto a primeira linha lista os tipos de destino. "S" indica que a convers??o da origem para o destino ?? v??lida.
Tipos

S
M
A
L
L
I
N
T

I
N
T
E
G
E
R

B
I
G
I
N
T

D
E
C
I
M
A
L

R
E
A
L

D
O
U
B
L
E

F
L
O
A
T

C
H
A
R

V
A
R
C
H
A
R

L
O
N
G

V
A
R
C
H
A
R

C
H
A
R

F
O
R

B
I
T

D
A
T
A

V
A
R
C
H
A
R

F
O
R

B
I
T

D
A
T
A

L
O
N
G

V
A
R
C
H
A
R

F
O
R

B
I
T

D
A
T
A

C
L
O
B

B
L
O
B

D
A
T
E

T
I
M
E

T
I
M
E
S
T
A
M
P

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.

Notas

Nesta discuss??o, os tipos de dado SQL-92 do Derby s??o categorizados da seguinte maneira:
  • num??rico
    • num??rico exato (SMALLINT, INTEGER, BIGINT, DECIMAL, NUMERIC)
    • num??rico aproximado (FLOAT, REAL, DOUBLE PRECISION)
  • cadeia
  • data/hora

Convers??es de tipos de dado num??ricos

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.

Convers??es de/para cadeias de bits

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.

Convers??es de valores de data/hora

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)