我正试图获得此输出。
MDT 1
MDT 2
MDT 3
MDT 11
MDT 44
但是,值按字母顺序排序,因此123在2之前。
示例:
MDT 1
MDT 11
MDT 156
MDT 2
MDT 3
MDT 303
MDT 44
等等。
我正在使用此代码,但它似乎无效。
SELECT * FROM file ORDER BY ABS(ID) ASC
我该如何解决这个问题?
答案 0 :(得分:2)
如果您的ID总是包含前缀为MDT
,那么您可以使用它,根据您的要求进行排序:
SELECT * FROM File
ORDER BY CAST(replace(ID, 'MDT ', '') AS UNSIGNED) ASC
答案 1 :(得分:1)
尝试这样,它将根据数字进行排序:
select substr(id,4)*1 from file order by substr(id,4)*1
它会给出
1
2
3
11个
44
...
如果您想要所有字段,请根据您的字符串长度尝试以下查询(“substr(id,4)”或“substr(id,5)”)(例如:id = proj- 001911 - >取SUBSTR(id,6)* 1))
select * from file order by substr(id,4)*1
答案 2 :(得分:0)
尝试该代码段
SELECT * FROM file ORDER BY ID + 0 ASC
答案 3 :(得分:0)
SELECT * FROM file
ORDER BY CONVERT(SUBSTRING(ID,5),UNSIGNED) ASC
SUBSTRING()
会在'MDT '
之后提取所有字符,而CONVERT()
会将剩余的子字符串更改为执行ORDER BY
的无符号整数
注意 SUBSTR()
是SUBSTRING()
的同义词。
答案 4 :(得分:0)
我也在搜索它,但是就在阅读这里时,我被它打动了,发现了一个解决方案,如果该列只包含数字作为数据,那么您需要在数据库表中进行修改并定义该列作为INT值类型,那么我确定您需要完成。
例如。在这种情况下,Port
是列中的{SELECT * FROM file ORDER BY CONVERT(SUBSTRING(ID,5),UNSIGNED) ASC}
,需要将其定义为Convert
。