gpt4 book ai didi

sql - Postgres : define a default value for CAST failures?

转载 作者:行者123 更新时间:2023-11-29 11:08:45 24 4
gpt4 key购买 nike

是否可以定义在 CAST 操作失败时返回的默认值?

例如,这样:

SELECT CAST('foo' AS INTEGER)

会返回默认值而不是抛出错误吗?

最佳答案

CAST 没有默认值:

A type cast specifies a conversion from one data type to another. PostgreSQL accepts two equivalent syntaxes for type casts:

CAST ( expression AS type )
expression::type

除了要转换的表达式和所需的目标类型之外,语法中没有任何空间。

但是,您可以使用一个简单的函数手动完成:

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;

然后你可以说 cast_to_int('pancakes', 0) 并得到 0

PostgreSQL 还可以让您 create your own casts所以你可以这样做:

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);

那么你可以说

select cast('pancakes'::text as integer)

并得到 0 或者你可以说

select cast(some_text_column as integer) from t

并为不是有效整数的 some_text_column 值获取 0。如果您想使用此自动默认转换来转换 varchar,那么您必须进行两次转换:

select cast(some_varchar::text as integer) from t

仅仅因为您可以做到这一点并不能说明它是一个好主意。我不认为将标准文本替换为整数转换是有史以来最好的主意。上述方法还要求您将标准 varchar 单独转换为 integer,如果您想自己完成整个转换而不是懒惰地踢到内置类型转换。

NULL 处理留给读者作为(简单的)练习。

关于sql - Postgres : define a default value for CAST failures?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10306830/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com