我正在尝试获得此输出。
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
我该如何解决这个问题?
我正在尝试获得此输出。
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
我该如何解决这个问题?
如果您的 ID 总是包含前缀 as MDT
,那么您可以使用它来根据您的要求进行排序:
SELECT * FROM File
ORDER BY CAST(replace(ID, 'MDT ', '') AS UNSIGNED) ASC
像这样尝试它会根据数字排序:
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 --> take SUBSTR(id, 6 ) *1) )
select * from file order by substr(id,4)*1
试试那个片段
SELECT * FROM file ORDER BY ID + 0 ASC
SELECT * FROM file
ORDER BY CONVERT(SUBSTRING(ID,5),UNSIGNED) ASC
SUBSTRING()
将提取之后的所有字符'MDT '
并将剩余的子字符串更改为对其执行CONVERT()
的无符号整数ORDER BY
注意 SUBSTR()
是 的同义词SUBSTRING()
。
我也在搜索它,但是就在阅读这里时,我突然想到了一个解决方案,如果该列只有数字作为数据,那么您需要在数据库表中进行修改并将该列定义为 INT 值输入,那么我确信你需要的东西都会完成。例如。{SELECT * FROM file ORDER BY CONVERT(SUBSTRING(ID,5),UNSIGNED) ASC}
在这种情况下Convert
是列,需要将其定义为INT(5)
有效。