mySql按年份和月份名称查询

时间:2016-05-29 19:43:23

标签: php mysql date

我希望按日期(年,月和日期)获取表格行

table

  • 如果日期为空白,则应该首先
  • 如果存在日期,则应按递减顺序按日期显示。
  • 如果两行具有相同的日期,则第二行首先出现。

如何通过mySql查询完成

3 个答案:

答案 0 :(得分:1)

使用演员表和字段

select * from my_table 
order by cast(`year` as signed ) desc, 
FIELD('', `month`, 'January', 'Febrary', 'March', 'April', 'May', 'June', 'July', 'August', 'September' , 'November', 'December')  desc, 
cast(date as signed)  desc, id desc;

答案 1 :(得分:0)

我了解您要更正数据模型并将三列更改为一个日期列,但您不能。

因此,使用生成的列扩展表格,而不是保留日期值:

alter table mytable add mydate date generated always as
  (str_to_date(concat("date", ' ', "month", ' ', "year"), '%d %M %Y')) stored;

从那一刻起,您将始终拥有要使用的日期列。它将根据现有列自动填充。 (您也可以将此生成的列virtual而不是stored,但读访问速度会更慢。)

然后使用此列来排序结果行。由于MySQL的ORDER BY不支持任何NULLS FIRST / NULLS LAST子句,因此需要CASE WHEN表达式来获取空值。

select *
from mytable
order by case when mydate is null then 1 else 2 end, mydate desc, id desc;

以下是有关生成列的文档:https://dev.mysql.com/doc/refman/5.7/en/create-table-generated-columns.html

答案 2 :(得分:-1)

首先,您应将月份值存储为数字,然后在查询结尾处使用order by。

Order by col1, col2, col3

然后根据您的需要ASCDESC

更好的方法是使用一列作为DATE类型,然后你可以这样做:

Order by YEAR(col_name), MONTH(col_name), DAY(col_name)