在MySql自定义函数中选择一个在最后一个之前

在MySql自定义函数中选择一个在最后一个之前,mysql,limit,Mysql,Limit,我想要一个函数,给定一个N,它将从按Sales列排序的Products表中返回第N-1个产品名称 产品表: 创建表格产品 ID int不为空, 名称varchar255不为空, Sales int不为空, 主键ID ; 我当前的函数定义: 创建函数getNameX INT返回varchar255 开始 回来 选择 名称 来自产品 销售订单 限制1偏移量X-1 ; 终止 但是它给了我一个关于X-1的语法错误。如何在自定义函数参数中使用减号运算符。对于我的用例,我需要在函数内部而不是外部进行否定。运

我想要一个函数,给定一个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这样的表达式

您可以这样做:

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字符串。请参阅执行语句。