Em comparação com a função CAST, TRY_CAST primeiro tenta converter a expressão no tipo especificado. Se a conversão falhar devido a erros, a operação exibirá null. Se uma conversão não for explicitamente permitida, a operação exibirá um erro. É possível encontrar a lista de conversões possíveis nas notas de uso abaixo. Por exemplo, tentar converter um booliano em um carimbo de data/hora não é permitido.
Sintaxe
TRY_CAST(expression AS type)
Argumentos
- expressão
-
Uma expressão que avalia para um ou mais valores, tal como um nome de coluna ou um literal. A conversão de valores nulos retorna nulos. A expressão não pode conter strings em branco ou vazias.
- tipo
-
Um dos tipos de dados aceitos. Para ver uma lista completa de tipos de recurso, consulte Tipos de dados. Para ver a lista de pares de tipos de dados de origem e de destino aceitos, consulte as observações de uso abaixo.
Tipo de retorno
TRY_CAST exibe um valor do tipo de dados especificado pelo argumento type. Se a conversão falhar, a operação exibirá null.
Observações de uso
Veja a lista de pares de tipos de dados de origem e de destino aceitos no Amazon Redshift para TRY_CAST.
- BOOL
-
SMALLINT, INT, BIGINT, SUPER
- SMALLINT
-
BOOL, INT, BIGINT, DECIMAL, REAL, FLOAT, BPCHAR, TEXT, VARCHAR, SUPER
- INT
-
BOOL, SMALLINT, BIGINT, DECIMAL, REAL, FLOAT, BPCHAR, TEXT, VARCHAR, SUPER
- BIGINT
-
BOOL, SMALLINT, INT, DECIMAL, REAL, FLOAT, BPCHAR, TEXT, VARCHAR, SUPER
- DECIMAL
-
SMALLINT, INT, BIGINT, REAL, FLOAT, BPCHAR, TEXT, VARCHAR, SUPER
- REAL
-
SMALLINT, INT, BIGINT, DECIMAL, FLOAT, BPCHAR, TEXT, VARCHAR, SUPER
- FLOAT
-
SMALLINT, INT, BIGINT, DECIMAL, REAL, BPCHAR, TEXT, VARCHAR, SUPER
- BPCHAR
-
SMALLINT, INT, BIGINT, DECIMAL, REAL, FLOAT, TEXT, VARCHAR, TIMESTAMP, TIMESTAMPTZ, DATE, TIME, TIMETZ, SUPER
- TEXT
-
SMALLINT, INT, BIGINT, DECIMAL, REAL, FLOAT, BPCHAR, VARCHAR, TIMESTAMP, TIMESTAMPTZ, DATE, TIME, TIMETZ, SUPER
- VARCHAR
-
SMALLINT, INT, BIGINT, DECIMAL, REAL, FLOAT, BPCHAR, TEXT, TIMESTAMP, TIMESTAMPTZ, DATE, TIME, TIMETZ, SUPER
- TIMESTAMP
-
BPCHAR, TEXT, VARCHAR, TIMESTAMPTZ, DATE, TIME
- TIMESTAMPTZ
-
BPCHAR, TEXT, VARCHAR, TIMESTAMP, DATE, TIME, TIMETZ
- DATE
-
BPCHAR, TEXT, VARCHAR, TIMESTAMP, TIMESTAMPTZ
- TIME
-
BPCHAR, TEXT, VARCHAR
- TIMETZ
-
BPCHAR, TEXT, VARCHAR
- SUPER
-
SUPER pode ser convertido em qualquer outro tipo de dados, com exceção de DATE, TIME, TIMETZ, TIMESTAMP e TIMESTAMPTZ.
Exemplos
O exemplo a seguir converte STRING em um INTEGER.
SELECT TRY_CAST('123' AS INT);
int ---- 123
O exemplo a seguir exibe null. A conversão de STRING em INTEGER é permitida para que TRY_CAST não exiba um erro, mas “foo” não é um número inteiro, então a função exibe null.
SELECT TRY_CAST('foo' AS INT)
O exemplo a seguir exibe um erro, pois a conversão de BOOLEAN em TIMESTAMP não é permitida.
SELECT TRY_CAST(true as timestamp);
Como TRY_CAST exibirá nulo em vez de exibir imediatamente um erro se a conversão falhar, é possível usar TRY_CAST para filtrar dados inválidos. Pense no exemplo a seguir, em que uma linha inválida é filtrada devido a uma falha de conversão na coluna de idade para Akua Mansa.
CREATE TABLE IF NOT EXISTS student_data(
name VARCHAR(100) NOT NULL,
age VARCHAR(3) NOT NULL,
enrollment_date DATE NOT NULL);
INSERT INTO student_data (name, age, enrollment_date)
VALUES
('Alejandro Rosalez', '10', '01/01/2000'),
('Akua Mansa', 'Ten', '01/01/2000');
SELECT * FROM student_data WHERE TRY_CAST(age AS INT) IS NOT NULL;
--Akua is not returned.
name | age | enrollment_date
-------------------+-----+-----------------
Alejandro Rosalez | 10 | 01/01/2000