我的数据库中有一个colum,其中包含格式的数字。
1- 1 - 2 - 2 -1 -2-2等
我想通过“第一个号码”,"second_number“来订购
我试过这样做:
ORDER BY CAST('session_number' as signed) ASC
但这并不能正确地排序第二个数字。
发布于 2018-07-10 08:40:07
通过取子串并转换为签名的第一部分命令:
CAST(SUBSTRING_INDEX(session_number, '-', 1) AS SIGNED) ASC,
CAST(SUBSTRING_INDEX(session_number, '-', -1) AS SIGNED) ASC
或创建已排序项的视图:
CREATE VIEW v_sessions_ordered_by_session_number
AS
SELECT *
FROM sessions
ORDER BY
CAST(SUBSTRING_INDEX(session_number, '-', 1) AS SIGNED) ASC,
CAST(SUBSTRING_INDEX(session_number, '-', -1) AS SIGNED) ASC;
然后将视图用作表:
SELECT some_field, session_number FROM v_sessions_ordered_by_session_number;
但是更好的解决方案是:
使session_number
成为十进制,如:1.1
、1.2
、2.1
等
如果不允许修改字段类型,那么
创建额外的:session_number_order
字段并保持抽取数据
发布于 2018-07-10 08:46:45
试试这个:
select nums
from (
select nums, position('-' in nums) `pos` from tbl
) a
order by cast(substring(nums, 1, pos - 1) as signed),
cast(substring(nums, pos + 1, length(nums) - pos) as signed)
在order by
子句中,您首先按第一个数字(在破折号-
之前)订货,第二个顺序是根据第二个数字(在破折号之后)进行。
https://stackoverflow.com/questions/51260490
复制相似问题