在MySql自定义函数中选择一个在最后一个之前
我想要一个函数,给定一个N,它将从按Sales列排序的Products表中返回第N-1个产品名称 产品表: 创建表格产品 ID int不为空, 名称varchar255不为空, Sales int不为空, 主键ID ; 我当前的函数定义: 创建函数getNameX INT返回varchar255 开始 回来 选择 名称 来自产品 销售订单 限制1偏移量X-1 ; 终止 但是它给了我一个关于X-1的语法错误。如何在自定义函数参数中使用减号运算符。对于我的用例,我需要在函数内部而不是外部进行否定。运行mysql 5.7 tldr: 为什么偏移量X-1会抛出语法错误,还有什么替代方法呢?说: 在存储程序中,可以使用整数值例程参数或局部变量指定限制参数 换句话说,LIMIT和OFFSET不接受像X-1这样的表达式 您可以这样做:在MySql自定义函数中选择一个在最后一个之前,mysql,limit,Mysql,Limit,我想要一个函数,给定一个N,它将从按Sales列排序的Products表中返回第N-1个产品名称 产品表: 创建表格产品 ID int不为空, 名称varchar255不为空, Sales int不为空, 主键ID ; 我当前的函数定义: 创建函数getNameX INT返回varchar255 开始 回来 选择 名称 来自产品 销售订单 限制1偏移量X-1 ; 终止 但是它给了我一个关于X-1的语法错误。如何在自定义函数参数中使用减号运算符。对于我的用例,我需要在函数内部而不是外部进行否定。运
CREATE FUNCTION getName(X INT) RETURNS varchar(255)
READS SQL DATA
BEGIN
DECLARE local_offset INT;
SET local_offset = X - 1;
RETURN (
SELECT
Name
FROM Products
ORDER BY Sales
LIMIT 1 OFFSET local_offset
);
END
看到了吗?你为什么想要一个函数呢?具体是什么?我已经包括了模式,您还想要什么?我要问的是为什么我不能在偏移量中使用X-1?该函数是我的团队所必需的规范,因此我几乎无法控制它是什么。他们需要这个-1来处理零索引。很明显,这将更容易处理的链,但肯定是有可能做到这一简单的操作?如果我没有错,你必须使用一个静态数字后的限制。您可以构造SQL字符串,然后执行SQL字符串。请参阅执行语句。