Postgres-将列转换为类型,如果无法转换则为Null

问题描述 投票:0回答:1

我有一个postgres表,我是从postgres的mongodb集合中加载的。尽管postgres列的类型为'bigint',但是有些行比max big int大,因此当我尝试从该表更新另一个表时,它会出错。也有带有非法字符的bigint列,例如我通过[]清除的“ _2131441”

WHERE col_name !~ '^([0-9]+[.]?[0-9]*|[.][0-9]+)$';

如何根据类型将其强制转换为有效列,否则将其设置为null / none?

我有一个postgres表,我是从postgres的mongodb集合中加载的。尽管postgres列的类型为'bigint',但是有些行比max big int大,因此,当我尝试更新时......>

postgresql
1个回答
0
投票

使用CASE表达式:

CASE WHEN col_name !~ '^(\+|-)?[[:digit:]]+$'
     THEN NULL::bigint
     WHEN col_name::numeric NOT BETWEEN -9223372036854775808 AND 9223372036854775807
     THEN NULL::bigint
     ELSE col_name::bigint
END
© www.soinside.com 2019 - 2024. All rights reserved.