sql查询将字符串转换为数组,然后与某些条件进行比较

时间:2016-08-04 10:55:16

标签: postgresql

我有一个名为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 

如何为此编写查询。

1 个答案:

答案 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