如何使用concat对查询进行排序?

时间:2019-03-29 07:10:08

标签: mysql sql

我想基于2018-01、2018-02等日期对查询进行排序。 但是我没有得到正确的结果

这是我尝试过的。

select 

concat(YEAR(trn.date), '-', MONTH(trn.date)) as date_result


FROM ....

ORDER BY date_result

结果:

date_result
2018-1
2018-10
2018-11
2018-12
2018-2

5 个答案:

答案 0 :(得分:2)

您必须提及排序顺序,例如“ asc”或“ desc”。 因此查询应类似于: 选择

concat(YEAR(trn.date),'-',MONTH(trn.date))作为date_result

从....

ORDER BY date_result desc

答案 1 :(得分:2)

select 
concat(YEAR(trn.date), '-', MONTH(trn.date)) as date_result
FROM yourtablename
ORDER BY YEAR(trn.date),MONTH(trn.date) order  by date_result desc

答案 2 :(得分:1)

按子句顺序添加YEAR(trn.date),MONTH(trn.date)

select 
concat(YEAR(trn.date), '-', MONTH(trn.date)) as date_result
FROM yourtablename
ORDER BY YEAR(trn.date),MONTH(trn.date)

答案 3 :(得分:1)

如果您只想对结果进行排序,而不是将其从2018-1更改为2018-01,则可以使用的查询是:

SELECT 
    concat(YEAR(trn.DATE), '-', MONTH(trn.DATE)) AS date_result
FROM ....
ORDER BY trn.DATE;

如果您想像2018-01那样更改结果,请使用以下查询:

SELECT 
    DATE_FORMAT(trn.DATE, '%Y-%m') AS date_result
FROM ....
ORDER BY trn.DATE;

答案 4 :(得分:1)

函数MONTH返回一个整数值。因此,您正在丢失前导零。 您可以转换为varchar并添加前导零,也可以仅使用SUBSTRING选择月份。

铸造解决方案:

SELECT concat(YEAR(trn.DATE), '-', RIGHT('0' + CAST(MONTH(trn.date) AS varchar(2)),2) ) as date_result
FROM ....
ORDER BY trn.DATE;

带子字符串的解决方案:

SELECT concat(YEAR(trn.DATE), '-', SUBSTRING(trn.date,6,2)) as date_result
FROM ....
ORDER BY trn.DATE;