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

Ric*_*ard 4 sql postgresql database-design boolean sql-update

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

ALTER TABLE frontend_item ADD COLUMN is_generic BOOLEAN;
Run Code Online (Sandbox Code Playgroud)

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

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

 UPDATE frontend_item SET is_generic...
Run Code Online (Sandbox Code Playgroud)

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

 substring(code from 10 for 2)
Run Code Online (Sandbox Code Playgroud)

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

Erw*_*ter 6

UPDATE frontend_item
SET    is_generic = (substring(code from 10 for 2) = 'AA');
Run Code Online (Sandbox Code Playgroud)

但是你真的需要冗余列吗?您可以继续使用表达式substring(code from 10 for 2),面对表的可能更新时更加可靠.该功能的成本很低,保持桌面小是整体性能的好处.

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

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

substr(code, 10, 2)
Run Code Online (Sandbox Code Playgroud)

请参阅手册中的字符串函数.