我有下表:
test=# CREATE TABLE stmts(id SERIAL, selector VARCHAR(255));
CREATE TABLE
test=# INSERT INTO stmts(selector) VALUES('5 > 3'),('5 < 3');
INSERT 0 2
test=# SELECT selector FROM stmts;
selector
----------
5 > 3
5 < 3
(2 rows)
我想修改 select 以便能够评估每一行的选择器的值,所以期望的效果是:
selector, magic FROM stmts;
selector | magic
--------------------
5 > 3 | true
5 < 3 | false
(2 rows)
如果这在行的上下文中执行,那就太好了,所以我们可以评估例如表达式 id = 5
等
这可能吗?
最佳答案
您可以在 plpgsql 函数中动态执行此操作:
create or replace function eval_bool(expr text)
returns boolean language plpgsql as $$
declare
rslt boolean;
begin
execute format('select %s', expr) into rslt;
return rslt;
end $$;
select id, selector, eval_bool(selector)
from stmts;
id | selector | eval_bool
----+----------+-----------
1 | 5 > 3 | t
2 | 5 < 3 | f
(2 rows)
关于sql - 执行作为值提供的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33813809/