我已经看过几个关于这个问题的问题,但是我无法理解我所看到的内容,所以我请求你原谅我提出一个问题已被问过几个问题。已经很久了 - 我两周前才开始学习所有这些sql,php等等东西,因为我需要制作一个工具来帮助我完成我的工作,所以我仍然是一个绝对的傻瓜:(
无论如何,我使用的是mysql,我正在用以下方式进行查询:
SELECT * FROM table ORDER BY col1
On" col1"我的价值观如下:
1/16
2/16
12/16
37/12
74/16
114/13
225/16
etc
此列上的值始终跟随" X / YY",其中" YY"总是两位数," X"可以是一位数到五位或六位数。 可以理解的是,由于列被设置为varchar以便接受" /",当我尝试对值进行排序时,我得到类似的内容:
1/16
114/13
12/16
2/16
225/16
37/12
74/16
而不是我想要的:
37/12
114/13
1/16
2/16
12/16
74/16
225/16
含义:首先按右边两位数排序,然后按" /"左边的排序。 我知道我可以通过存储" X"和" YY"在不同的栏目上,但我真的很感激,如果有人能告诉我如何做到这一点。
祝你好运, T.F。
答案 0 :(得分:2)
使用cast
和substring_index
,您可以排序以获得所需的输出。
SELECT
*
FROM
`37031650`
ORDER BY
cast(
substring_index(col1, '/', - 1) AS signed INTEGER
),
cast(
substring_index(col1, '/', 1) AS signed INTEGER
) ASC
mysql> select * from `37031650`;
+--------+
| col1 |
+--------+
| 1/16 |
| 114/13 |
| 12/16 |
| 2/16 |
| 225/16 |
| 37/12 |
| 74/16 |
+--------+
7 rows in set
mysql> select * from `37031650` order by cast(substring_index(col1,'/', -1) as signed integer), cast(substring_index(col1,'/', 1) as signed integer) asc;
+--------+
| col1 |
+--------+
| 37/12 |
| 114/13 |
| 1/16 |
| 2/16 |
| 12/16 |
| 74/16 |
| 225/16 |
+--------+
7 rows in set