数据订购&选择Max SQL Server

时间:2013-12-21 05:26:28

标签: sql sql-server

假设我有一个user表,记录如下:

----------------------
| User ID | Username |
----------------------
|US1      | Andy     |
|US2      | Boston   |
|US3      | Charlie  |
|US4      | Donnie   |
|US5      | Elmo     |
|US6      | Frank    |
|US7      | Garry    |
|US8      | Henry    |
|US9      | Ignatius |
|US10     | John     |

我需要的是

US10      | John

然后我这样做:

SELECT MAX (UserId) FROM User;

结果是

US9      | Ignatius 

因为它按字面顺序排序,所以US10不是最大值

我应该怎么做才能完成这个结果? 提前谢谢。

4 个答案:

答案 0 :(得分:1)

如果你有固定的数据格式,比如数字最后是字符串,那么你可以使用PATINDEX()函数从字符串中获取数字

SELECT TOP 1 * FROM [User]
ORDER BY CAST(SUBSTRING(UserId, PATINDEX('%[0-9]%', UserId), LEN(UserId)) AS INT) DESC;

如果您没有固定字符串中的数字格式,并且您只想根据数字对数据进行排序,请查看以下链接中的更多详细信息

<强> SQL Server 2008 - order by strings with number numerically

答案 1 :(得分:0)

假设您的列格式在开头始终具有相同的字符数量,您可以使用此查询删除前2个字符并将剩余字符转换为数字,以便在最大查询中获得正确的行为:

SELECT MAX(CAST(SUBSTRING(`UserId` FROM 3) AS UNSIGNED)) FROM `User` ;

答案 2 :(得分:0)

尝试此查询

SELECT TOP 1 * FROM User ORDER BY CAST(RIGHT(UserId,LEN(UserId)-2) AS INT) DESC

OP

  

US10 |约翰

答案 3 :(得分:0)

注意:请记住user是sql中的保留字,因此应该在[user]

的括号内使用它

有很多选择:

1)

select top 1 Userid,
CAST(SUBSTRING(UserId, PATINDEX('%[0-9]%', UserId), LEN(UserId)) AS INT) as Maxid,
username
from [user] 
Order By Maxid desc

输出:

Userid  Maxid   username
=============================
US10    10      John

2)

SELECT TOP 1 * FROM [User]
ORDER BY CAST(RIGHT(UserId,LEN(UserId)-2) AS INT) DESC

输出

userid  username
=====================
US10    John