簡體   English   中英

如何從PostgreSQL條件字符串中提取按參數索引排序的列名數組?

[英]How to extract an array of column names ordered by parameter index from an PostgreSQL conditions string?

說我有這個字符串表示,PostgreSQL的查詢WHERE條件:

(a > $3 OR a < $4 OR (b <= $1 AND b >= $4)) OR (c = $1 AND (c != $2 OR c <> $3)) OR (d @> $5 AND (d <@ $6 OR c && $6)) OR e || $7

我如何提取由名稱索引($ 1,$ 2,$ 3)與列名稱進行比較的列名稱(a,b,c)數組?

結果應為:

[ // comments display parameter indexes by which the array is ordered
  b, //$1 $4
  c, //$1 $2 $3 $6
  a, //$3 $4
  d, //$5 $6
  e  //$7
]

請注意,如果將第一個參數($ 1)進行多次比較,則數組中的第一項將只是首先解析的列名。

這是一組已知的運算符:

[ '<=', '>=', '!=', '<>', '@>', '<@', '&&', '||', '<', '>', '=' ]

以下解決方案應涵蓋您的情況

正則表達式: /((\\w) (?:<=|>=|!=|<>|@>|<@|&&|\\|\\||<|>|=) (\\$\\d))/g
這會將運算符和列參數分組,然后可以對其進行匯總

 var str= "(a > $3 OR a < $4 OR (b <= $1 AND b >= $4)) OR (c = $1 AND (c != $2 OR c <> $3)) OR (d @> $5 AND (d <@ $6 OR c && $6)) OR e || $7" var regex = /((\\w) (?:<=|>=|!=|<>|@>|<@|&&|\\|\\||<|>|=) (\\$\\d))/g; var match; var result = {}; while (match = regex.exec(str)) { var column = match [2]; var parameter = match[3]; result[column] || (result[column] = []) result[column].push(parameter) } console.log(result) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM