2013-08-01 26 views
5

后端是PostgreSQL服务器9.1。从SQL查询中获取参数名称

我想构建AdHoc XML报告。报告文件将包含SQL查询,所有这些查询都必须以SELECT语句开头。 SQL查询将有参数。根据相关列的数据类型,这些参数将相应地呈现给用户以提供值。

一个rought SQL查询:

SELECT * FROM customers 
WHERE 
(
    [email protected]_code AND [email protected] 
    AND customers.type= 
    (
     SELECT type from types 
     WHERE [email protected]_code 
     AND types.is_active = @type_is_active 
    ) 
    AND customers.account_open_date BETWEEN @start_date AND @end_date 
) 
OR customers.flagged = @flagged; 

我想从查询字符串列名和参数列表,并把它们放入一个字符串数组且稍后处理。

我可以使用下面的正则表达式只匹配参数:

@(?)(?<parameter>\w+) 

预计较量:

[email protected]_code 
[email protected] 
[email protected]_code 
types.is_active = @type_is_active 
customers.account_open_date BETWEEN @start_date AND @end_date 
customers.flagged = @flagged 

如何搭配 “@Parameter”, “=”,并“BETWEEN”马上?

+0

如果你使用XML,那么为什么没有一个参数元素,饶了自己的麻烦? – Romoku

+0

所以你想在你的sql查询中找到“@ {variablename}”,并将其替换为用户想要的实际值? – ganders

+0

嘿,谢谢。 :)你不觉得混合使用SQL和XML会变得相当复杂吗? –

回答

2

我知道这是一个有点晚,但对于未来的研究的缘故:

我想这正则表达式提供你的目的:

(\w+\.\w+(?:\s?\=\s?\@\w+|\sBETWEEN\s\@\w+\sAND\s\@\w+)) 

检查this Regex101 fiddle这里,并仔细阅读说明它的每个部分。

基本上,它首先查找您的customer.xxx_yyy列,然后查找= @variableBETWEEN @variable1 AND @variable2

捕获组:

MATCH 1 
1. [37-75] 
`[email protected]_code` 

MATCH 2 
1. [80-108]  
`[email protected]` 

MATCH 3 
1. [184-205] 
`[email protected]_code` 

MATCH 4 
1. [218-251] 
`types.is_active = @type_is_active` 

MATCH 5 
1. [266-327] 
`customers.account_open_date BETWEEN @start_date AND @end_date` 

MATCH 6 
1. [333-361] 
`customers.flagged = @flagged`