2016-08-04 100 views
1

比較我有一個名爲feature表作爲SQL查詢字符串轉換爲數組,然後用一些條件

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_valueactual_value如果我們分裂基於|分隔符爲三個子字符串。如果我們根據,定界符分割運算符,我們也有三個運算符。

現在我想的sample_value第一子串比較的actual_value第一子串用第一運營商的sample_valueactual_value第二子串第二子字符串中使用第二運營商等等...

基本上該查詢將看起來像

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(因爲條件(寬度:768>寬度:1024)爲假)和第二行輸出將爲1(所有三個條件滿足)。

輸出表如下所示:

sample_value     operator_seq   actual_value   result 
ID:Desktop|Height:627|Width:768 =,>,>  ID:Desktop|Height:600|Width:1024 0 
ID:Desktop|Height:627|Width:768 =,>,>  ID:Desktop|Height:600|Width:600 1 

如何編寫該查詢。

+0

[評估條件](http://pastebin.com/896FJfKA)老實說它是 「玩票」解決方案,如果你仍然想使用純SQL來完成。它適用於您的示例數據,但看起來很醜並且有一些限制(例如關於參數的類型)。我的建議是創建存儲的函數來計算條件。 – Abelisto

+0

感謝您的回覆。但是我對存儲過程瞭解不多。這很緊急。所以請儘可能請你提出相同的查詢。再次感謝。 –

+0

正如許多次所說:「它不是一個代碼寫作網站」。如果你不太瞭解存儲過程,那麼,至少目前這個任務可能不適合你。 – Abelisto

回答

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 
+0

非常感謝。它正在工作。需要稍微改變以適合我的數據。你救了我。再次感謝。 –

相關問題