我在数据库中有一个名为"mark“的字段,它包含以下数据:
P-9
R-12
R-10
P-10
P-11
R-11
R-9
R-8
P-12
P-8
...前缀可以在数字之前最多4个字符。
预期产出:
P-8
P-9
P-10
P-11
P-12
R-8
R-9
R-10
R-11
R-12
....到目前为止,我已经:
ORDER BY CAST(mark AS UNSIGNED), mark ASC这在看来几乎是正确的,但是它没有对低于10的数字进行正确排序。
发布于 2017-11-21 07:40:20
用这个,
order by substring(mark,1,locate('-',mark)+1), cast(substring(mark,locate('-',mark)+1) as unsigned) asc发布于 2017-11-21 07:40:51
我的SUBSTRING(code,LOCATE('-',code)+1)变体
CREATE TABLE Test(
code varchar(10)
);
INSERT Test VALUES
('PPP-9'),
('RR-12'),
('RRRR-10'),
('P-10'),
('P-11'),
('R-11'),
('R-9'),
('R-8'),
('P-12'),
('P-8');
SELECT
*,
CAST(SUBSTRING(code,LOCATE('-',code)+1) AS UNSIGNED) NUM,
LEFT(code,LOCATE('-',code)-1) PREFIX
FROM Test
ORDER BY
CAST(SUBSTRING(code,LOCATE('-',code)+1) AS UNSIGNED),
LEFT(code,LOCATE('-',code)-1)或
...
ORDER BY
LEFT(code,LOCATE('-',code)-1),
CAST(SUBSTRING(code,LOCATE('-',code)+1) AS UNSIGNED)https://stackoverflow.com/questions/47407562
复制相似问题