繁体   English   中英

在SQL中按数字顺序升序

[英]Order by numeric values in SQL ascending

我正在尝试获取此输出。

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始终包含前缀MDT ,那么您可以根据需要使用它进行排序:

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

SQLFiddle演示

试试那个片段

SELECT * FROM file ORDER BY ID + 0 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->取SUBSTR(id,6 )* 1))

select * from file order by substr(id,4)*1
SELECT * FROM file
ORDER BY CONVERT(SUBSTRING(ID,5),UNSIGNED) ASC

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

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

我也正在搜索它,但是就在阅读这里时,我被它打动了,发现了一个解决方案,如果该列只包含数字作为数据,那么您需要在数据库表中进行修改并将该列定义为INT值类型,那么我确定您需要完成。 例如。 {SELECT * FROM file ORDER BY CONVERT(SUBSTRING(ID,5),UNSIGNED) ASC}在这种情况下, Convert为列,需要将其定义为INT(5)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM