【问题标题】:SQL LIMIT syntax errorSQL LIMIT 语法错误
【发布时间】:2011-08-31 19:31:11
【问题描述】:

这就是全部内容:

SELECT * FROM sometable LIMIT 5*DATEDIFF(NOW(), '2011-08-30'), 5

错误:

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 在第 1 行的 '*DATEDIFF(NOW(), '2011-08-30'), 5' 附近

问题显然是LIMIT 显然只接受整数。它也不接受 1+1(1+1) 作为值。有办法解决吗?

为了让您不必去尝试,5*DATEDIFF(NOW(), '2011-08-30') 工作得很好。

我正在尝试修复this 答案..

【问题讨论】:

  • This question 如果您想在 SQL 中执行此操作,可能会对您有所帮助,但是 AFAIK,您无法使用 MySQL 在 LIMIT 子句中进行计算。
  • 看起来确实没有办法绕过它,但还有其他事情可以做。例如,运行一个单独的查询以选择 datediff,将其保存为您使用的任何编程语言的变量,然后将其插入您上面的查询中。要么,要么您可以先通过其他方式计算 datediff(例如使用 php 日期函数)
  • 甚至不能使用服务器端变量,所以select @lim := datediff(...); select .... limit @lim,1 也失败了。

标签: mysql limit


【解决方案1】:

,在普通 mysql 中不可行
(但是,可以通过存储过程,用户定义的函数)

您的情况,它可以通过 PHP 调用轻松替换

$offset = 5*
        date_diff(new DateTime('now'), new DateTime('2011-08-31'))->format('%a');
$sql = "SELECT * FROM sometable LIMIT {$offset},5";

【讨论】:

    【解决方案2】:

    限制必须是整数或局部变量。来自MySQL docs

    LIMIT 子句可用于限制返回的行数 通过 SELECT 语句。 LIMIT 接受一个或两个数字参数, 必须都是非负整数常量,这些 例外:

    • 在准备好的语句中,可以使用指定 LIMIT 参数 ?占位符标记。

    • 在存储程序中,LIMIT 参数可以使用整数值的例程参数或 MySQL 的局部变量来指定 5.5.6.

    【讨论】:

      猜你喜欢
      • 2023-04-06
      • 2011-10-16
      • 2020-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-31
      • 2015-03-22
      • 2015-04-04
      相关资源
      最近更新 更多