2013-02-21 66 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