No hay un valor predeterminado para CAST:
Una conversión de tipos especifica una conversión de un tipo de datos a otro. PostgreSQL acepta dos sintaxis equivalentes para conversiones de tipos:
CAST ( expression AS type )
expression::type
No hay espacio en la sintaxis para nada más que la expresión que se va a convertir y el tipo de destino deseado.
Sin embargo, puedes hacerlo a mano con una función simple:
create or replace function cast_to_int(text, integer) returns integer as $$
begin
return cast($1 as integer);
exception
when invalid_text_representation then
return $2;
end;
$$ language plpgsql immutable;
Entonces puedes decir cosas como cast_to_int('pancakes', 0)
y obtiene 0
.
PostgreSQL también le permite crear sus propios moldes para que pueda hacer cosas como esta:
create or replace function cast_to_int(text) returns integer as $$
begin
-- Note the double casting to avoid infinite recursion.
return cast($1::varchar as integer);
exception
when invalid_text_representation then
return 0;
end;
$$ language plpgsql immutable;
create cast (text as integer) with function cast_to_int(text);
Entonces podrías decir
select cast('pancakes'::text as integer)
y obtiene 0
o podrías decir
select cast(some_text_column as integer) from t
y obtiene 0
para la some_text_column
valores que no son enteros válidos. Si quisiera lanzar varchar
Si usa esta conversión predeterminada automática, entonces tendría que hacer una doble conversión:
select cast(some_varchar::text as integer) from t
El hecho de que puedas hacer esto no significa que sea una buena idea. No creo que reemplazar el texto estándar por una conversión de enteros sea la mejor idea. El enfoque anterior también requiere que deje el estándar varchar
a integer
lanzar solo, podría evitarlo si quisiera hacer toda la conversión usted mismo en lugar de patear perezosamente al lanzamiento incorporado.
El manejo de NULL se deja como un ejercicio (fácil) para el lector.