繁体   English   中英

基于整数列更新二进制列 - Postgres

[英]Update binary column based on integer column - Postgres

我有一些带有二进制列 fish_otolith 的遗留数据,这是不准确的。 它应该基于名为 fish_age 的单独列进行指示。 当 fish_age 列中存在年龄时,二进制列 fish_otolith 应指示,而当 fish_age 列中存在空值时,二进制列 fish_otolith 不应指示。

鱼耳石 鱼龄
1 10
1 2
0 无效的
1 无效的
1 无效的

我正在努力编写正确的更新sql语句“如果fish_age不是Null,则fish_otolith等于1,否则如果fish为null,则fish_otolith等于0

如果您的fish_otolith是布尔值,请尝试以下操作:

update ttable 
   set fish_otolith = fish_age is not null;

表达式fish_age is not null返回一个布尔值,可以将其转换为整数,结果为false -> 0true -> 1 ,这就是您要查找的结果。 所以:

update fishes  
   set fish_otolith = (fish_age is not  null)::integer;

然而,这个(或任何其他更新)包含一个潜在的致命缺陷: fish_otolith可以独立于fish_age进行更新,并且可以包含任何有效的整数,而不仅仅是 0 或 1。这个问题可以通过轻微的设计更改来克服。 fish_otolith定义为从fish_age派生的generated always ... (参见这里的演示- 两种实现)。

注意:@MikeOrganek 的任一设置也可以。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM