2017-10-09 173 views
0

我在PostgreSQL 9.4数据库中有一个表,其中一列包含以下格式的整数和字母表数据。PostgreSQL中的字母数字排序9.4

1 
10 
10A 
10A1 
1A 
1A1 
1A1A 
1B 
1C 
1C1 
2 
65 
89 

格式是,它从一个数字开始,然后一个字母表然后数字然后字母表继续。我想对下面的字段进行排序,

1 
1A 
1A1 
1A1A 
1B 
1C 
1C1 
2 
10 
10A 
10A1 
65 
89 

但是当排序10在2之前。请建议一个可能的查询以获得所需的结果。

在此先感谢

回答

0

试试这个

SELECT * 
FROM table_name 
ORDER BY (substring(column_name, '^[0-9]+'))::int  -- cast to integer 
      ,coalesce(substring(column_name, '[^0-9_].*$'),'') 
+0

感谢您的回复,这个查询断裂,如果数量达到字母后,PL检查输出。 https://ibb.co/cZ6kJw –