如何显示mysql中显示的内容的升序或降序

如何显示mysql中显示的内容的升序或降序,mysql,sql,sql-order-by,Mysql,Sql,Sql Order By,现在显示的输出: 1234/45/67-9 1234/45/67-8 1234/45/67-7 1234/45/67-6 1234/45/67-5 1234/45/67-4 1234/45/67-3 1234/45/67-22 1234/45/67-2 1234/45/67-10 1234/45/67-1 1234/45/67 所需产出: 1234/45/67-22 1234/45/67-10 1234/45/67-9 1234/45/67-8 1234/45/67-7 1234/45/67-

现在显示的输出:

1234/45/67-9
1234/45/67-8
1234/45/67-7
1234/45/67-6
1234/45/67-5
1234/45/67-4
1234/45/67-3
1234/45/67-22
1234/45/67-2
1234/45/67-10
1234/45/67-1
1234/45/67
所需产出:

1234/45/67-22
1234/45/67-10
1234/45/67-9
1234/45/67-8
1234/45/67-7
1234/45/67-6
1234/45/67-5
1234/45/67-4
1234/45/67-3
1234/45/67-2
1234/45/67-1
1234/45/67



SELECT invoiceNo
FROM invoice
WHERE invoiceNo LIKE '1234/45/67%'
ORDER BY invoiceNo DESC

我希望输出以降序显示,但它不能以正确的方式显示?如何实现它?

如果前缀始终为10个字符长,则可以使用以下命令将其切碎,并将第二个块转换为一个数字:

将第二部分转换为数字可以使它们像数字而不是字符串一样排序,这样
-10
-1
之前,而不是相反。如果您总是在WHERE子句中使用形式为
9999/99/99
的前缀,则可以通过以下方式简化顺序:

select invoiceno
from invoice
where invoiceno like '1234/45/67%'
order by cast(substring(invoiceno from 11) as decimal);

使用辅助计算字段强制转换为
整数
,如下所示:

SELECT invoiceNo, CAST(SUBSTR(invoiceNo FROM 11) AS INT) AS invoiceNumber
FROM invoice
WHERE invoiceNo LIKE '1234/45/67%'
ORDER BY invoiceNumber DESC
请尝试此查询-

SELECT * FROM (
  SELECT invoiceNo,
    @third_part:=SUBSTRING_INDEX(invoiceno, '/', -1) tp
  FROM
    invoice
  WHERE
    invoiceNo LIKE '1234/45/67%'
  ) t
ORDER BY
  SUBSTRING_INDEX(tp, '-', 1) * 1 DESC,
  IF (LOCATE('-', tp) = 0, 0, SUBSTRING_INDEX(tp, '-', -1) * 1) DESC
请尝试此查询

SELECT invoiceNo
FROM invoice
ORDER BY cast(substring(invoiceNo from 11) as decimal) ASC

怀疑表是否包含数千行,是否需要更多时间加载此查询???@dude:the
substring
调用不是免费的。如果它变得太贵,那么您可能希望将
invoiceno
分为两列,这样您就可以在没有字符串争用的情况下对它们进行排序。如何实现?如果我面对这样的问题problem@dude:为发票号的两部分添加两个新列,插入时将发票号拆分为两部分,然后根据需要按第1部分、第2部分下单。基本上,您需要预先计算
子字符串
调用,而不是每次排序时,以小块的形式支付计算费用。
SELECT invoiceNo
FROM invoice
ORDER BY cast(substring(invoiceNo from 11) as decimal) ASC