mysql命令按varchar混合值

时间:2019-07-01 15:40:01

标签: mysql

我在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

1 个答案:

答案 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            |