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

时间:2015-03-17 13:09:38

标签: sql postgresql database-design sql-update boolean

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

ALTER TABLE frontend_item ADD COLUMN is_generic BOOLEAN;

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

我的问题是,我怎样才能在Postgres中这样做?我已经能够使用文档计算出一些单独的组件:

 UPDATE frontend_item SET is_generic...

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

 substring(code from 10 for 2)

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

1 个答案:

答案 0 :(得分:6)

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

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

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

BTW,有一个不那么详细的Postgres变体做同样的事情:

substr(code, 10, 2)

See string functions in the manual.