【问题标题】:SQL - ORDER BY 'datetime' DESC [closed]SQL - ORDER BY 'datetime' DESC [关闭]
【发布时间】:2014-08-25 09:05:05
【问题描述】:

我的数据库中存储了几个值作为 DATETIME 数据类型 (YYYY-MM-DD HH:MM:SS),我一直在尝试按降序排列它们- 从最大到最小(在日期的情况下 - 从最新到最旧),但奇怪的是,它似乎完全忽略了 DESC 运算符的存在。

SQL 查询(缩写):

SELECT post_datetime FROM post WHERE type=`published` ORDER BY post_datetime DESC LIMIT 3

然后,它们按以下顺序打印:

2014-04-30 11:55:11
2014-07-01 12:25:40
2014-07-02 12:28:03

(这些恰好也是数据库中“最旧”的日期条目)

解决方案?我会注意到在其他事物(例如普通数字)上使用 DESC 也不起作用。我检查了我的语法,尝试了引号,没有引号,双引号等等。

(注意 - 我将在几个小时内无法回答任何其他问题,但我会在返回后尽我所能回复)


(2017 年 6 月 11 日)

编辑:为了澄清,对于未来的读者,语法错字与问题无关,是我在输入示例时的错误。我一直在使用自制的查询生成器,以至于当时我忘记了正确的语法。问题在于我的程序逻辑——而不是查询。上面的示例已经过编辑,对于任何希望执行上述任务的人来说,是正确的解决方案。很抱歉,这篇文章的浏览量已超过 5 万次……但现在你知道了。

【问题讨论】:

  • 该查询应该至少抛出一个语法错误(考虑到在ORDER BY 和LIMIT 之后使用=),并且一个错误抱怨它找不到标记为的列'post_datetime DESC'。您应该先尝试解决此类错误。

标签: mysql sql datetime


【解决方案1】:
  1. 对字符串使用单引号
  2. 不要在表名两边加上单引号(使用 ` 代替)
  3. 不要在数字周围加上单引号(可以,但更难阅读)
  4. 不要将AND 放在ORDER BY 和LIMIT 之间
  5. 不要将= 放在ORDER BY、LIMIT 关键字和条件之间

所以您的查询将如下所示:

SELECT post_datetime 
FROM post 
WHERE type = 'published' 
ORDER BY post_datetime DESC 
LIMIT 3

【讨论】:

    【解决方案2】:

    试试:

    SELECT post_datetime 
    FROM post 
    WHERE type = 'published' 
    ORDER BY post_datetime DESC 
    LIMIT 3
    

    【讨论】:

      【解决方案3】:

      去掉这里的引号:

      是:

      ORDER BY = 'post_datetime DESC' AND LIMIT = '3'
      

      应该是:

      ORDER BY post_datetime DESC LIMIT 3
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-14
        • 1970-01-01
        • 1970-01-01
        • 2015-02-26
        • 1970-01-01
        • 1970-01-01
        • 2011-04-22
        • 2020-03-09
        相关资源
        最近更新 更多