A função TRY_CAST converte um valor TEXT para um tipo de dados especificado. Diferente da função CAST, ela nunca gera erro em caso de falha na conversão, retornando NULL. Utilize TRY_CAST quando precisar tratar entradas inválidas de forma segura, sem interromper a execução da consulta.
O Hologres também oferece suporte a outras funções de conversão de tipos. Para mais informações, consulte Funções de data e hora.
Limitações
A função TRY_CAST exige o Hologres V2.2 ou superior.
Observações de uso
A expressão de entrada (
source_string_expr) deve ser do tipo TEXT.O parâmetro
target_data_typedeve ser um dos seguintes: INTEGER, SMALLINT, BIGINT, REAL, DOUBLE PRECISION, BOOLEAN, DECIMAL, JSONB, DATE, TIMESTAMP ou TIMESTAMPTZ.Os tipos DATE, TIMESTAMP e TIMESTAMPTZ requerem o Hologres V3.0 ou superior.
Caso o valor não possa ser convertido para o tipo de destino, a função retorna NULL.
Sintaxe
TRY_CAST( <source_string_expr> AS <target_data_type> )
Parâmetros
|
Parâmetro |
Tipo de dados |
Descrição |
|
|
TEXT |
Coluna ou expressão que será convertida. |
|
|
Consulte as Observações de uso |
Tipo de dados de destino. Retorna NULL se a conversão do valor não for possível. |
Exemplos
Converter TEXT para INT
Crie uma tabela e insira dados de teste. Em seguida, use TRY_CAST para converter a coluna value de TEXT para INT.
-- Create a table and insert test data
CREATE TABLE IF NOT EXISTS try_cast_test (
key int,
value text
);
INSERT INTO try_cast_test VALUES (1, '1'), (2, 'abc');
-- Convert the value column from TEXT to INT
SELECT key, value, TRY_CAST(value AS INT) AS value_int
FROM try_cast_test;
Resultado:
key | value | value_int
-----+-------+-----------
1 | 1 | 1
2 | abc | \N
(2 rows)
Como o valor 'abc' não pode ser convertido para INT, a função TRY_CAST retorna NULL para essa linha.
Usar TRY_CAST com CASE WHEN para tratar resultados de conversão
Combine TRY_CAST com CASE WHEN para definir ramificações lógicas baseadas no sucesso da conversão. Esse é o padrão mais comum para processar os resultados da função TRY_CAST em consultas de produção.
SELECT
value,
CASE
WHEN TRY_CAST(value AS INT) IS NULL THEN 'Not a valid integer'
ELSE 'Valid integer'
END AS conversion_status
FROM try_cast_test;
Resultado:
value | conversion_status
-------+---------------------
1 | Valid integer
abc | Not a valid integer
(2 rows)