- 分类:技术
- 发布于 2015年2月04日
- 点击数:54
今天为一个网站改数据,遇到个小问题。
m88体育 从数据库中提取一系列记录,其中一列是一个业务编号,为通用性考虑,这一列采用了字符串类型,而其内容却是数字,比如"1","2","12"等等。今天删除了某些记录,又新加入了一些,所以这一列的顺序相对于主关键字来说就混乱了。m88体育 提取的数据需要按这一列排序,于是就简单写了个查询:
SELECT product_type_label, product_name FROM product WHERE product_type = 'ENTREES' ORDER BY product_type_label;
结果自然是错的:
1 | 만두 Raviolis 餃子 |
10 | 떡볶이 Toppokki トッポッキ |
11 | Boulots assaisonnés |
12 | 육회 Steak tartare coréen ユッケ |
13 | 닭볶음면 Nouilles sautées avec poulet チキン焼きそば |
14 | Assortiment de beignets |
2 | 김밥 Maki coréen のり巻き |
3 | 김치전 Kimchijeon キムチジョン |
4 | 해물 파전 Crêpe coréenne de fruits de mer 海鮮チヂミ |
5 | 잡채 Jabchai チャプチェ |
6 | 깐풍기 Sauté de poulet カンプンギ |
7 | 오징어 볶음 Sauté de calamar piquant |
8 | 새우튀김 Beignets de crevettes 天ぷら |
9 | 김치돼지볶음 Sauté de Kimchi avec porc キムチ豚炒め |
因为那一列既然是字符串类型,那么当然用字典排序法排序,所以"1"之后是"10",而"2"要排在所有以'1'开头的数字之后。解决办法比较讨巧,那就是先按字符串长度排序,然后再排内容:
SELECT product_type_label, product_name FROM product WHERE product_type = 'ENTREES' ORDER BY LENGTH(product_type_label), product_type_label;
正确结果:
1 | 만두 Raviolis 餃子 |
2 | 김밥 Maki coréen のり巻き |
3 | 김치전 Kimchijeon キムチジョン |
4 | 해물 파전 Crêpe coréenne de fruits de mer 海鮮チヂミ |
5 | 잡채 Jabchai チャプチェ |
6 | 깐풍기 Sauté de poulet カンプンギ |
7 | 오징어 볶음 Sauté de calamar piquant |
8 | 새우튀김 Beignets de crevettes 天ぷら |
9 | 김치돼지볶음 Sauté de Kimchi avec porc キムチ豚炒め |
10 | 떡볶이 Toppokki トッポッキ |
11 | Boulots assaisonnés |
12 | 육회 Steak tartare coréen ユッケ |
13 | 닭볶음면 Nouilles sautées avec poulet チキン焼きそば |
14 | Assortiment de beignets |