排序数据串为int

问题描述:

我有一个表:排序数据串为int

id(int) item(character varying) sort_no(character varying) 
1  item-1     1 
2  item-2     2 
3  item-3     10 
4  item-4     3 

现在。我想输出:

sort_no  item 
1   item-1 
2   item-2 
3   item-4 
4   item-10 

我试图

SELECT sort_no, item FROM table ORDER BY sort_no 

,得到了意外的结果。输出是

sort_no item 
1   item-1 
4   item-10 
. 
. 
. 

注意:我不想更改表的数据类型。这个怎么做?

+1

您的查询确实应该有效。你确定表中有sort_no 2和3的行吗?你可以给更多的行由你的查询产生? – 2014-09-11 11:52:49

+0

您可能应该将您的'sort_no'列更改为int,因为我猜''_no'无论如何都代表'number'。在它当前的形式(字符变化)中,它会考虑这样的排序:1,10,2,3 ...因为这就是你如何排序字符串(与a,aa,b,c,...相比)否则,你的查询看起来确定。我能想到的唯一的另一个原因是您在sort_no列中有前导空格混淆了排序。 – deroby 2014-09-11 11:58:44

+0

MySQL或PostgreSQL,或两者兼而有之?他们处理这个不同。 – 2014-09-11 12:07:13

如果您使用mysql uyou可以使用强制转换为字符转换为整数

SELECT sort_no, item FROM table ORDER BY cast(sort_no as UNSIGNED) 

更多细节

official documentation要按列进行排序sort_no,如果它包含整数,就可以将其转换为整数(在PostgreSQL中):

SELECT sort_no, item FROM table ORDER BY sort_no::int