订购

2016-01-20 144 views
0

我想在下面为了订购

1)特殊字符命令记录
2)预计只数
3)字母/字母

记录

G1 
G10 
G19 
123 
87 
[email protected]#$ 
G5 
G25 
G9 

记录输出:

[email protected]#$ 
87 
123 
G1 
G5 
G9 
G10 
G19 
G25 

SQL Fiddle

任何人都可以请帮忙。

我已经试过SUBSTRING(name FROM '^(.*?)(\\d+)?$')

+0

用数字排序不支持PostgreSQL排序的顺序? – jarlh

+0

是的,我想它支持 – Pramod

+0

如果是这样,请执行'ORDER BY Records COLLATE numericcollat​​ion'。 (您可能需要分别处理特殊字符...) – jarlh

回答

0

您可以使用正则表达式来匹配标准

SELECT * 
FROM test 
ORDER BY substring(NAME FROM '[$&+,:;[email protected]#|]') -- To get special character 
     ,substring(NAME FROM '^[0-9]*$')::INT -- To get only integer from a value(87 and 123) 
     ,substring(NAME FROM '[0-9]+')::INT -- To get integer from a value (10 from G10) 

SQLFIDDLE-Demo