我在Mysql表中具有以下值:
id name (varchar 100)
1 CHANCE EAU TENDRE
2 CRISTALLE
3 EGOISTE
4 1- COCO
5 1- COCO NOIR
6 ALLURE
7 2- N.5
8 3- COCO HOMME
9 - COCO CHANEL
...
我不知道名字的顺序,我试图搜索没有成功,但是没有用。 当然,我要魅力在机会淡水
之前预期结果:
| id | name |
| --- | ----------------- |
| 6 | ALLURE |
| 1 | CHANCE EAU TENDRE |
| 4 | 1- COCO |
| 9 | - COCO CHANEL |
| 8 | 3- COCO HOMME |
| 5 | 1- COCO NOIR |
| 2 | CRISTALLE |
| 3 | EGOISTE |
| 7 | 2- N.5 |
我的测试:
SELECT * FROM brands ORDER BY CAST(name AS UNSIGNED), name ASC
SELECT * FROM brands ORDER BY convert(`name`, decimal) ASC
SELECT * FROM brands ORDER BY (name * 1) ASC
由于混合值(数字+字符),这些方法不起作用。
编辑: 添加此链接以更好地理解问题: http://sqlfiddle.com/#!9/8f6e9a/2
答案 0 :(得分:0)
您似乎想先按品牌名称,然后按开头的数字排序:
select * from brands
order by
trim(trim(leading '-' from trim(trim(leading name + 0 from name)))),
name + 0
请参见demo。
结果:
| id | name |
| --- | ----------------- |
| 6 | ALLURE |
| 1 | CHANCE EAU TENDRE |
| 4 | 1- COCO |
| 9 | - COCO CHANEL |
| 8 | 3- COCO HOMME |
| 5 | 1- COCO NOIR |
| 2 | CRISTALLE |
| 3 | EGOISTE |
| 7 | 2- N.5 |