MySQL在mysql查询中使用varchar类型的order by子句

时间:2016-11-25 08:50:08

标签: mysql

我正在尝试编写一个mysql查询。一个名为'fileno'的数据字段具有varchar类型,数据采用以下方式:

===================
id   |  fileno
===================
 1   |  16/12
 2   |  15/91
 3   |  15/70
 4   |  16/07
===================

现在我需要按降序排序字段,我希望字段按降序排序。但不能正常工作。预期的订单如下:

16/12
16/07
15/91
15/70

我尝试了以下查询:

SELECT
    id,
    fileno
FROM
    customer_request
ORDER BY
    fileno DESC

2 个答案:

答案 0 :(得分:2)

SELECT id, fileno
FROM yourTable
ORDER BY CAST(SUBSTRING(fileno, INSTR(fileno, '/') + 1) AS UNSIGNED)    DESC,
         CAST(SUBSTRING(fileno, 1, INSTR(fileno, '/') - 1) AS UNSIGNED) DESC

在这里演示:

SQLFiddle

答案 1 :(得分:0)

蒂姆的解决方案非常完美。另一种方法是从字符串中替换/并按DESC顺序

对其进行排序

以下是示例查询:

SELECT id, fileno
FROM customer_request
ORDER BY REPLACE(fileno, '/', '') DESC

Working Demo