8

我正在尝试获得此输出。

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

我该如何解决这个问题?

4

5 回答 5

2

如果您的 ID 总是包含前缀 as MDT,那么您可以使用它来根据您的要求进行排序:

SELECT * FROM File 
ORDER BY CAST(replace(ID, 'MDT ', '') AS UNSIGNED) ASC

SQLFiddle 演示

于 2012-12-04T04:19:17.210 回答
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 --> take SUBSTR(id, 6 ) *1) )

select * from file order by substr(id,4)*1
于 2012-12-04T04:31:02.590 回答
1

试试那个片段

SELECT * FROM file ORDER BY ID + 0 ASC
于 2012-12-04T04:14:54.300 回答
0
SELECT * FROM file
ORDER BY CONVERT(SUBSTRING(ID,5),UNSIGNED) ASC

SUBSTRING()将提取之后的所有字符'MDT '并将剩余的子字符串更改为对其执行CONVERT()的无符号整数ORDER BY

注意 SUBSTR()是 的同义词SUBSTRING()

于 2012-12-04T04:29:36.173 回答
0

我也在搜索它,但是就在阅读这里时,我突然想到了一个解决方案,如果该列只有数字作为数据,那么您需要在数据库表中进行修改并将该列定义为 INT 值输入,那么我确信你需要的东西都会完成。例如。{SELECT * FROM file ORDER BY CONVERT(SUBSTRING(ID,5),UNSIGNED) ASC}在这种情况下Convert是列,需要将其定义为INT(5)有效。

于 2019-05-10T19:23:38.837 回答