复杂ID的SQL查询

时间:2015-10-26 17:10:00

标签: mysql sql database

我有一张表想用ID来缩短。我使用的ID有点复杂。 ID的形式是

  

EM_ {A-Z} {INT}

每个Id都以EM_开头,后面跟着一个字符形式A-Z和每个字母增加的INT。我想通过ID来缩短表格。当我这样做时,我得到以下结果。 作为一个例子,表格的虚构快照将是

    ID |Title|Year
--------------------
EM_A1  |     |
EM_A10 |     |
EM_A2  |     |
         ***
EM_A9  |     |
         ***    
EM_C1  |     |
EM_C10 |     |
EM_C11 |     |
EM_C2  |     |
EM_C20 |     |
         ***    
EM_C9  |     |
         *** 

我想创建一个查询,以ID为正确的顺序返回表,作为示例。

    ID |Title|Year
--------------------
EM_A1  |     |
EM_A2  |     |
         ***
EM_A9  |     |
EM_A10 |     |
         ***    
EM_C1  |     |
EM_C2  |     |
         *** 
EM_C9  |     |
EM_C10 |     |
EM_C11 |     |
         ***  
EM_C20 |     |
         ***    

任何帮助都会非常有用。谢谢。

3 个答案:

答案 0 :(得分:3)

您可以使用substring按字母排序,然后按照跟随后的数字排序。

Fiddle with sample data

select * from tablename
order by substring(id, 4, 1), cast(substring(id, 5) as unsigned)

答案 1 :(得分:1)

子排序的第一部分是前缀EX_ ?,所以我得到了左4个字符。辅助排序是它后面的值,所以我从第5个字符开始得到它的值。

select *
   from 
      yourtable 
   order by 
      left( id, 4 ), 
      abs( substr( id, 5 ));

答案 2 :(得分:0)

一个简单的查询就可以了,试试这个>

{ "FacilityName": "ACN Clinic ID" }