3

您好,我正在尝试通过排序在 mysql 中进行排序

  • 特殊字符
  • 信件
  • 然后数字

似乎mysql排序

  • 特殊字符
  • 数字
  • 然后是字母

见下文

select distinct uag_linecode from part order by uag_linecode;

| A-1          |
| A/C          |
| A1S          |  out of place
| ABP          |
| ABS          |
| ACI          |
| ADM          |
| ADR          |
| BAS          |

这就是我要的:

A-1 
A/C
ABR
ABS
ACI
ADM
ADR 
A1S correct spot
BAS

如果有人可以帮助我,我将永远感激不尽。

所有行代码的长度始终为 3 个字符。

4

1 回答 1

5

如果它总是第二个字符,这样的东西会起作用——你可以添加到 case 子句来检查第一个和第三个字符......

select distinct uag_linecode,
substring(uag_linecode, 2, 1)
from part
order by 
  case 
    when substring(uag_linecode, 2, 1) REGEXP ('^[0-9]') THEN 1 ELSE 0 END , uag_linecode

这是SQL 小提琴

--EDIT 这似乎也适用于第一个和第三个字符:

select distinct uag_linecode,
   substring(uag_linecode, 1, 1),
   substring(uag_linecode, 2, 1),
   substring(uag_linecode, 3, 1)
from part
order by 
   case when substring(uag_linecode, 1, 1) REGEXP ('^[0-9]') THEN 1 ELSE 0 END,
   substring(uag_linecode, 1, 1),
   case when substring(uag_linecode, 2, 1) REGEXP ('^[0-9]') THEN 1 ELSE 0 END,
   substring(uag_linecode, 2, 1),
   case when substring(uag_linecode, 3, 1) REGEXP ('^[0-9]') THEN 1 ELSE 0 END ,    
   substring(uag_linecode, 3, 1)

还有更多小提琴

同样正如@Orbling 正确所说,您将获得更好的性能(特别是如果您有很多记录)来删除REDEXP 并使用> = '0' AND <= '9'。

祝你好运。

于 2013-01-29T17:06:01.297 回答