一尘不染

如何在Postgres中的select语句中计算表达式

sql

Postgres 9.1+数据库包含客户和产品。在客户表中,在每个客户的价格表达式列中,客户价格被描述为sql表达式。

如何从这些数据创建价格表?我在下面尝试了代码,但由于未定义eval()而出错。

create table customer
( id int primary key,
  priceexpression text );
insert into customer values (1, 'price*0.95'),(2,'cost+12.0' );

create table product
( id char(20) primary key,
   price numeric(12,4),
   cost numeric(12,4) );
insert into product values ('PRODUCT1', 120, 80),('PRODUCT2', 310.5, 290);


select
  customer.id as customer,
  product.id as product,
  eval(priceexpression) as price
 from customer,product

这是ASP.NET MVC4应用程序。


阅读 148

收藏
2021-03-17

共1个答案

一尘不染

您可以编写一个为您执行此操作的SQL函数,并使用例如postgres-
utils
随附的函数:

select 
  c.name as cust_name,
  p.name as prod_name,
  p.cost as prod_cost,

  eval(  
    'select '||c.price_expression||' from product where id=:pid',
    '{"{cost}",:pid}',  
    array[ p.cost, p.id ]  
  )      as cust_cost

from product p,  customer c

但是当然,它可能很慢,不安全,您可以使用实例化视图来更轻松地缓存它,等等。

2021-03-17