Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql按日期定制订单_Mysql_Sql Order By - Fatal编程技术网

mysql按日期定制订单

mysql按日期定制订单,mysql,sql-order-by,Mysql,Sql Order By,我有一张表格,上面有一个列有一年中所有12个月的月份。我想订购这个col,底部是当前月份,然后按时间顺序排列,如果我现在运行查询 十二月 一月 二月 九月 十一月 月份的格式为MONTHNAME(STR_TO_DATE(U.Month,'%m')) 我根据我在这里找到的东西改编了这篇文章,但这只会有助于确保当前月份列在最后一位。有什么想法吗 ORDER BY (CASE WHEN Month = MONTH(NOW()) THEN 1

我有一张表格,上面有一个列有一年中所有12个月的月份。我想订购这个col,底部是当前月份,然后按时间顺序排列,如果我现在运行查询

十二月

一月

二月

九月

十一月

月份的格式为MONTHNAME(STR_TO_DATE(U.Month,'%m'))

我根据我在这里找到的东西改编了这篇文章,但这只会有助于确保当前月份列在最后一位。有什么想法吗

      ORDER BY (CASE 
           WHEN Month = MONTH(NOW())
           THEN 1
           ELSE 0
       END ) ASC, month ASC
或:


这两种方法都可以做到。

如果您想在几个月内坚持使用字符串值,只需稍加修改即可。您可能需要使用完整的月份名称,或者在所有月份使用3个字母的缩写(我不太确定您使用的是什么格式,因为您的示例显示了缩写,但您还提到了输出完整月份的
MONTHNAME()
。下面是它的工作原理

对于3个字母的月份缩写:

ORDER BY (STR_TO_DATE(CONCAT(`month`, ' 01 2012'), '%b %d %Y')) ASC
完整月份名称:

ORDER BY (STR_TO_DATE(CONCAT(`month`, ' 01 2012'), '%M %d %Y')) ASC

这会将月份值转换为日期(通过添加日期和年份)然后进行排序。

这是一个您将在生产环境中重复使用的查询,还是用于某种一次性报告目的?好吧,它将在奇怪的情况下使用,因此优化不是一个很大的问题,如果这是您的目的的话?是的,这就是我问的原因。如果您将对此进行定期查询,我将给出答案uld建议将包括更改字段类型。谢谢,但这两个字段都是在本月的第一个(顶部)其余月份不在上面描述。我已经更新了我的原始帖子,可能是我格式化了导致问题的日期吗?谢谢,迈克,但我得到了这个错误-函数str_to_date的日期时间值不正确:“1 01 2012”对不起,是的,我使用的是完整的月份名称。好的,如果我使用“按STR_TO_DATE(Month,'%m')ASC订购;”但它是否总是将当前月份放在其12月份的底部?我不确定它是最后一次订购,因为它是最后一个月还是因为它是当前月份?
ORDER BY (STR_TO_DATE(CONCAT(`month`, ' 01 2012'), '%b %d %Y')) ASC
ORDER BY (STR_TO_DATE(CONCAT(`month`, ' 01 2012'), '%M %d %Y')) ASC