sql - 根据 Postgres 中的另一列设置列的值?

标签 sql postgresql database-design sql-update boolean

我正在使用 Postgres 9.1,我在我的表中添加了一个新的 boolean 列:

ALTER TABLE frontend_item ADD COLUMN is_generic BOOLEAN;

此列的值将基于另一列 code 的值。如果 code 的字符 10-11 是 AA,那么 is_generic 的值应该是 TRUE。否则它应该为 false(如果尚未设置则为 null)。

我的问题是,如何在 Postgres 中执行此操作?我已经能够使用文档计算出一些单独的组件:

 UPDATE frontend_item SET is_generic...

然后我知道我可以得到 code 的子字符串,如下所示:

 substring(code from 10 for 2)

但是如何将子字符串转换为 boolean 值,然后将其与 UPDATE 语句粘合在一起?

最佳答案

UPDATE frontend_item
SET    is_generic = (substring(code from 10 for 2) = 'AA');

但是你真的需要冗余列吗?您可以继续使用表达式 substring(code from 10 for 2),这在面对可能的表更新时更可靠。该函数的成本很低,保持表较小有利于整体性能。

冗余存储很少是个好主意。仅用于特殊优化。

顺便说一句,有一个不那么冗长的 Postgres 变体做同样的事情:

substr(code, 10, 2)

See string functions in the manual.

关于sql - 根据 Postgres 中的另一列设置列的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29099946/

相关文章:

node.js - NodeJS如何只在工作时间执行一个功能?

sql - 在Delphi 7中运行更新查询时,如何解决封闭数据集错误?

sql - Mysql DateTime 组按 15 分钟

php - 在日期上加一个月。将日期设置为给定月份的最后一天

mysql - 调查的答案选项引用主表,例如城市

mysql - 存储 Facebook Access Token 的最佳字段类型

c# - 在 ListView 中提取和吐出数据库项目

mysql - JOIN 列取决于日期范围

sql - 如果任何字段匹配,如何对 postgres 表的结果进行分组?

node.js - 如何使用 sequelize 执行此请求?