TRY_CAST convierte un valor TEXT a un tipo de dato específico. A diferencia de CAST, nunca genera un error si la conversión falla; en su lugar, devuelve NULL. Utilice TRY_CAST cuando desee gestionar entradas no válidas sin interrumpir la consulta.
Hologres también admite otras funciones de conversión de tipos. Para obtener más información, consulte Funciones de fecha y hora.
Limitaciones
TRY_CAST requiere Hologres V2.2 o posterior.
Notas de uso
La expresión de entrada (
source_string_expr) debe ser de tipo TEXT.target_data_typedebe ser uno de los siguientes: INTEGER, SMALLINT, BIGINT, REAL, DOUBLE PRECISION, BOOLEAN, DECIMAL, JSONB, DATE, TIMESTAMP o TIMESTAMPTZ.DATE, TIMESTAMP y TIMESTAMPTZ requieren Hologres V3.0 o posterior.
Si el valor no se puede convertir al tipo de destino, se devuelve NULL.
Sintaxis
TRY_CAST( <source_string_expr> AS <target_data_type> )
Parámetros
|
Parámetro |
Tipo de dato |
Descripción |
|
|
TEXT |
La columna o expresión por convertir. |
|
|
Consulte Notas de uso |
El tipo de dato de destino. Devuelve NULL si el valor no se puede convertir. |
Ejemplos
Conversión de TEXT a INT
Cree una tabla e inserte datos de prueba; luego, utilice TRY_CAST para convertir la columna value de TEXT a 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)
El valor 'abc' no se puede convertir a INT, por lo que TRY_CAST devuelve NULL para esa fila.
Uso de TRY_CAST con CASE WHEN para gestionar resultados de conversión
Combine TRY_CAST con CASE WHEN para bifurcar la lógica según el resultado de la conversión. Este es el patrón más común para actuar sobre los resultados de TRY_CAST en consultas de producción.
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)