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.
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
são categorizados da seguinte maneira:
- numérico
- numérico exato (SMALLINT, INTEGER, BIGINT, DECIMAL, NUMERIC)
- numérico aproximado (FLOAT, REAL, DOUBLE PRECISION)
- cadeia
- cadeia de caracteres (CLOB, CHAR, VARCHAR, LONG VARCHAR)
- cadeia de bits (BLOB, CHAR FOR BIT DATA, VARCHAR FOR BIT DATA, LONG VARCHAR FOR BIT DATA)
- 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)