python Amazon-Redshift 中的 eval():将字符串作为表达式求值
python's eval() in Amazon-Redshift: evaluating strings as expressions
我坚信不存在解决此问题的方法,但我还是想问问。我的问题正是这个:
Are there any way to execute a query inside the string value (like eval) in PostgreSQL?
但对于不支持存储函数的 Amazon Redshift。具体来说,我相信我的表达式都可以被评估为具有一个或多个表达式的布尔值,例如 'X <= 10' 与 AND 和 OR 连接,即:
string = 'X <= 10 AND Y = 5 AND Z >= 0'
我可以轻松地将变量替换为正确的值,但我尽量不求助于构建我自己的解析器。有人看到这样做的好方法吗?谢谢!
你走运了!可以调用 Python 代码的 Amazon Redshift recently introduced User Defined Functions。
因此,您可以利用 Python eval()
命令来评估条件。
下面是一些对我有用的代码:
CREATE FUNCTION f_eval(condition TEXT)
RETURNS boolean
VOLATILE AS $$
return eval(condition)
$$ LANGUAGE plpythonu;
然后 运行 它与:
SELECT f_eval('5 < 6 and 3 < 4');
这个 returns true
在 SQL.
我坚信不存在解决此问题的方法,但我还是想问问。我的问题正是这个:
Are there any way to execute a query inside the string value (like eval) in PostgreSQL?
但对于不支持存储函数的 Amazon Redshift。具体来说,我相信我的表达式都可以被评估为具有一个或多个表达式的布尔值,例如 'X <= 10' 与 AND 和 OR 连接,即:
string = 'X <= 10 AND Y = 5 AND Z >= 0'
我可以轻松地将变量替换为正确的值,但我尽量不求助于构建我自己的解析器。有人看到这样做的好方法吗?谢谢!
你走运了!可以调用 Python 代码的 Amazon Redshift recently introduced User Defined Functions。
因此,您可以利用 Python eval()
命令来评估条件。
下面是一些对我有用的代码:
CREATE FUNCTION f_eval(condition TEXT)
RETURNS boolean
VOLATILE AS $$
return eval(condition)
$$ LANGUAGE plpythonu;
然后 运行 它与:
SELECT f_eval('5 < 6 and 3 < 4');
这个 returns true
在 SQL.