在查询条件下调用函数

Posted

技术标签:

【中文标题】在查询条件下调用函数【英文标题】:Calling function in where condition on query 【发布时间】:2012-09-10 13:38:06 【问题描述】:

我在mysql 中创建了一个自定义函数。 我想在查询条件下调用它,例如

SELECT * FROM TABLE_NAME

WHERE (FUNCTION_NAME);

这可能吗?

注意:我的函数像查询一样返回值

【问题讨论】:

工具:http://www.sensefulsolutions.com/2010/10/format-text-as-table.html WHERE 子句中使用函数是一种不好的做法,因为它由于减少了索引使用而导致性能不佳。除非你打算SELECT ... WHERE col = function()? 函数类似于“SELECT FUNCTION_NAME('columnname','a');”将返回“列名 LIKE ('%a%')” 【参考方案1】:

是的,您可以在查询中使用函数... 唯一的事情是你的条件,如果你要使用类似的东西 SELECT * FROM TABLE_NAME WHERE id = FUNCTION_NAME; 确保 FUNTION_NAME 返回一个数字而不是查询,或者如果您要使用 where inSELECT * FROM TABLE_NAME WHERE id in (FUNCTION_NAME); 确保 FUNCTION_NAME 返回包含一列的查询。 function_name 的重要之处在于返回的内容,例如值或查询等

【讨论】:

函数类似于“SELECT FUNCTION_NAME('columnname','a');”将返回 "columnname LIKE ('%a%')" 所以它像查询一样返回......但对我不起作用。它在准备好的语句中工作正常,但在直接查询的情况下。 尝试使用call function_name(('columnname','a'); 我尝试使用“SELECT * FROM TABLE_NAME WHERE call function_name(('columnname','a');”但它似乎不起作用。 不,试试这个:set @a:=function_name();select * from table_name where @a(条件) 嗯……我试试这个……但是查询没有返回结果。只是为了说明这一点 - 我没有使用存储过程来实现它。我想在我们使用的查询窗口中实现这一点。

以上是关于在查询条件下调用函数的主要内容,如果未能解决你的问题,请参考以下文章

python 循环为循环的类,它递归调用一个函数直到满足条件,然后移动到下一个函数并调用

oracle在sql查询中没有函数调用的索引

在 Oracle 查询的函数调用中进行日期时间数学运算

使用 VBA 函数调用在 QueryEditor 中创建查询以指定 WHERE IN 子句

函数递归与二分法(python3入门)

sql用啥方法可以实现递归函数?