【问题标题】:Postgres - Cast Column to Type or Null If Unable To CastPostgres - 如果无法转换,则将列转换为类型或 Null
【发布时间】:2020-04-10 04:45:50
【问题描述】:

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

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

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

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    使用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
    

    请注意,bigint 是一个整数,不允许使用小数分隔符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-13
      • 2019-02-26
      • 1970-01-01
      • 2020-11-18
      • 1970-01-01
      • 2018-05-14
      • 2021-06-15
      • 1970-01-01
      相关资源
      最近更新 更多