根据 Postgres 中的另一列设置列的值?
Set value of column based on another column in Postgres?
我正在使用 Postgres 9.1,我在 table:
中添加了一个新的布尔列
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)
但是如何将子字符串转换为布尔值,然后将其与 UPDATE
语句粘合在一起?
UPDATE frontend_item
SET is_generic = (substring(code from 10 for 2) = 'AA');
但是你真的需要冗余列吗?您可以继续使用表达式 substring(code from 10 for 2)
,面对 table 的可能更新,它更可靠。该函数的成本很低,保持 table 较小有利于整体性能。
冗余存储很少是个好主意。仅用于特殊优化。
顺便说一句,有一个不那么冗长的 Postgres 变体做同样的事情:
substr(code, 10, 2)
我正在使用 Postgres 9.1,我在 table:
中添加了一个新的布尔列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)
但是如何将子字符串转换为布尔值,然后将其与 UPDATE
语句粘合在一起?
UPDATE frontend_item
SET is_generic = (substring(code from 10 for 2) = 'AA');
但是你真的需要冗余列吗?您可以继续使用表达式 substring(code from 10 for 2)
,面对 table 的可能更新,它更可靠。该函数的成本很低,保持 table 较小有利于整体性能。
冗余存储很少是个好主意。仅用于特殊优化。
顺便说一句,有一个不那么冗长的 Postgres 变体做同样的事情:
substr(code, 10, 2)