2013-02-21 54 views
4
SELECT vm.value FROM vm ORDER BY vm.value ASC; 

结果:奇怪的ORDER BY为了在PostgreSQL的

. 
0 
0% 
0.0 
0.964 
%.0f 
%.0f mph 
-1.0° 
11/1 
11-14-1981 
112 mph 
11:48:43 
%1$.1f mph %[email protected] 
1/2 
12.5˚ 
1/4 
195 lb 
%.1f° 
2 days ago 
%.2f 
2º out-in 
3/4 
3.5 
3.6 
3D 
3 days ago 
4º closed 
5'10'' 
5”10” 
Account 

我记得ASCII/Unicode的数字应该遵循相互紧密不是百分比和其他字符交替。

+2

看起来像百分比,点和其他特殊字符在比较过程中被忽略。 – alno 2013-02-21 19:15:35

+1

“vm.value”的列类型是什么? – 2013-02-21 19:16:06

+0

@Joachim Isaksson:字符变化(1000) – Paul 2013-02-21 19:19:11

回答

6

我记得ASCII/Unicode数字应该紧跟 紧跟在百分号和其他字符之间。

这适用于某些地区,但不适用于其他地区。显然它不适用于你正在使用的那个。在SQL中发出show lc_collate以查看正在使用的区域设置。

随着最新版本的PG,包括9.1,您可以使用每个查询的特定区域进行排序,像这样:

SELECT vm.value FROM vm ORDER BY vm.value COLLATE "C"; 

对于问题出具体的数据,这将排序如您所愿。

+0

'en_US.UTF-8'以问题描述的方式排序。有人会认为整理不会忽视非字母数字。 – 2013-02-21 19:34:27

+0

是的,我正在使用en_US.UTF-8 – Paul 2013-02-21 19:53:36