我有一个名为feature
的表格为
sample_value operator_seq actual_value
ID:Desktop|Height:627|Width:768 =,>,> ID:Desktop|Height:600|Width:1024
ID:Desktop|Height:627|Width:768 =,>,> ID:Desktop|Height:600|Width:600
如果我们基于sample_value
分隔符进行拆分,则 actual_value
和|
有三个子字符串。如果我们根据,
分隔符拆分运算符,我们也有三个运算符。
现在我想使用第一个运算符,sample_value
的第二个子字符串和{{1}的第二个子字符串,将actual_value
的第一个子字符串与第一个子字符串sample_value
进行比较使用第二个运算符等等......
基本上查询看起来像
actual_value
所以第一行输出为0(因为条件(宽度:768>宽度:1024)为假),第二行输出为1(所有三个条件都满足)。
输出表如下:
if (
(sample_value.fisrt_substr operator_seq.first_operator actual_value.first_substr) and
(sample_value.second_substr operator_seq.second_operator actual_value.second_substr) and
(sample_value.third_substr operator_seq.third_operator actual_value.third_substr)
) Then 1 else 0
如何为此编写查询。
答案 0 :(得分:0)
创建一个函数:
create or replace function evalBoolean(arg1 text,op text,arg2 text) returns boolean
as
$body$
declare
result boolean;
begin
execute 'select $$'||arg1||'$$'||op||'$$'||arg2||'$$' into result;
return result;
end;$body$
language plpgsql
并像这样使用它:
select *
,evalBoolean(sv[1],op[1],act[1]) and evalBoolean(sv[2],op[2],act[2]) and evalBoolean(sv[3],op[3],act[3])
from (
select string_to_array(sample_value,'|') sv
,string_to_array(operator_seq,',') op
,string_to_array(actual_value,'|') act
from your_table
) a