排序数据串为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
.
.
.
注意:我不想更改表的数据类型。这个怎么做?
答
如果您使用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
您的查询确实应该有效。你确定表中有sort_no 2和3的行吗?你可以给更多的行由你的查询产生? – 2014-09-11 11:52:49
您可能应该将您的'sort_no'列更改为int,因为我猜''_no'无论如何都代表'number'。在它当前的形式(字符变化)中,它会考虑这样的排序:1,10,2,3 ...因为这就是你如何排序字符串(与a,aa,b,c,...相比)否则,你的查询看起来确定。我能想到的唯一的另一个原因是您在sort_no列中有前导空格混淆了排序。 – deroby 2014-09-11 11:58:44
MySQL或PostgreSQL,或两者兼而有之?他们处理这个不同。 – 2014-09-11 12:07:13