是否有可能在PL / pgSQL中将字符串计算为表达式而不是语句?

时间:2015-07-11 19:19:27

标签: postgresql plpgsql

我有两个数据库表:

# \d table_1
      Table "public.table_1"
   Column   |  Type   | Modifiers
------------+---------+-----------
 id         | integer |
 value      | integer |
 date_one   | date    |
 date_two   | date    |
 date_three | date    |

# \d table_2
     Table "public.table_2"
   Column   |  Type   | Modifiers
------------+---------+-----------
 id         | integer |
 table_1_id | integer |
 selector   | text    |

table_2.selector中的值可以是onetwothree中的一个,用于选择table_1中的一个日期列

我的第一个实现使用了CASE

SELECT value
FROM table_1
INNER JOIN table_2 ON table_2.table_1_id = table_1.id
WHERE CASE table_2.selector
      WHEN 'one' THEN
        table_1.date_one
      WHEN 'two' THEN
        table_1.date_two
      WHEN 'three' THEN
        table_1.date_three
      ELSE
        table_1.date_one
      END BETWEEN ? AND ?

selector的值是这样的,我可以将感兴趣的列标识为eval(date_#{table_2.selector})如果 PL / pgSQL允许将字符串评估为表达式。

我能找到的最接近的是EXECUTE string,它评估整个陈述。有没有办法评估表达式

1 个答案:

答案 0 :(得分:0)

在plpgsql函数中,您可以动态创建任何表达式。但是,在您描述的情况下,这不适用。必须在执行查询之前显式定义查询,而在执行查询时会选择字段。

您的查询是最好的方法。您可以尝试使用某个功能,但它不会带来任何好处,因为问题的本质将保持不变。