Postgresql 将存储公式转换为PL/pgSQL
我在数据库中存储了一个公式,该值由组织中的一些人定义,用于计算平均值。问题是我需要在PL/pgSQL过程postgres中使用该公式,但语法不同,有些公式如下:Postgresql 将存储公式转换为PL/pgSQL,postgresql,plpgsql,Postgresql,Plpgsql,我在数据库中存储了一个公式,该值由组织中的一些人定义,用于计算平均值。问题是我需要在PL/pgSQL过程postgres中使用该公式,但语法不同,有些公式如下: if (x >= 0 && x <= 51.999) then 0 elsif (x > 51.999 && x <= 64.999) then 70 elsif (x > 64.999 && x <= 90.999) then 100 elsif
if (x >= 0 && x <= 51.999) then 0
elsif (x > 51.999 && x <= 64.999) then 70
elsif (x > 64.999 && x <= 90.999) then 100
elsif (x > 90.999 && x <= 103.999) then 115
elsif (x > 103.999 && x <= 130) then 130 end
x=我的价值
我一直在考虑更换,但我不知道这是否是正确的解决方案。。。
所以,我需要你的帮助。
谢谢 在PL/pgSQL语法中:
y:=案例
当x介于0和51.999之间时,则为0
当x介于52和64.999之间时,则为70
当x介于65和90.999之间时,则为100
当x介于91和103.999之间时,则为115
当x在104和130之间时,则为130
终止
请注意,中间是包含在内的。这就是我改变下限的原因。
作为可重用的功能:
创建或替换函数自定义函数x numeric返回数值语言sql作为
$$
选择案例
当x介于0和51.999之间时,则为0
当x介于52和64.999之间时,则为70
当x介于65和90.999之间时,则为100
当x介于91和103.999之间时,则为115
当x在104和130之间时,则为130
结束::数字;
$$;
编辑
多重公式。您可以用一种干净的声明方式定义/更改其中的许多
创建或替换函数pg_temp.custom_function函数名称文本,x数字
返回数值语言sql作为
$$
使用函数_datafname,范围_lo,范围_hi,结果为
价值观
-函数_a参数值
'函数a',0,51.999,0,
“功能”,52,64.999,70,
“功能”,65,90.999,100,
“函数_a”,91103.999,115,
“函数_a”,104,130.999,130,
-函数参数值
“功能”,0,51.999,10,
“功能”,52,64.999,170,
“功能”,65,90.999,200,
“功能”,91103.999215,
“功能”,104、130.999、230
-其他函数名和值
选择结果::数值
从函数u数据
其中fname=函数名称
以及范围_lo和范围_hi之间的x;
$$;
按如下方式调用函数:
if (x >= 0 && x <= 51.999) then 0
elsif (x > 51.999 && x <= 64.999) then 70
elsif (x > 64.999 && x <= 90.999) then 100
elsif (x > 90.999 && x <= 103.999) then 115
elsif (x > 103.999 && x <= 130) then 130 end
选择自定义函数“函数”,100
看起来你需要一个新的。同时将&&更改为和。您是在询问等效的PSQL语法是什么,还是在询问如何将您拥有的字符串转换为PSQL表达式?在后一种情况下,您在应用程序中使用什么编程语言?您可能不应该在数据库中执行此操作。我需要将该字符串转换为plsql语法,但该公式是可变的,因此可以。与此不同。这个应用程序是RoR,我需要在plsql中为大量的案例做这件事麻烦的是这个函数是一个变量,有些函数和我放的函数一样,而另一些则不同它们遵循类似的模式,即以阶梯式的方式在一个范围内为参数返回一个值?是的,每个公式都非常相似,计算一个范围内的值,其他值如x*1I将附加我的答案