我有一列(XID),其中包含varchar(20)序列,格式如下:xxxzzzzzz其中X是任意字母或短划线和zzzzz是一个数字。查询将在列中具有字母数字序列的表中搜索最高数字值
我想写一个查询,将剥离xxx和评估并返回哪个是表列中的最高数字。
例如:
aaa1234
bac8123
g-2391
后,我会得到8123个
感谢的结果!
我有一列(XID),其中包含varchar(20)序列,格式如下:xxxzzzzzz其中X是任意字母或短划线和zzzzz是一个数字。查询将在列中具有字母数字序列的表中搜索最高数字值
我想写一个查询,将剥离xxx和评估并返回哪个是表列中的最高数字。
例如:
aaa1234
bac8123
g-2391
后,我会得到8123个
感谢的结果!
有点痛苦,但有可能。这里是假设第一个数字后,只有数字出现(你实际上指定为的情况下)的一种方法:
select max(cast(stuff(col, 1, patindex('%[0-9]%', col) - 1, '') as float))
from t;
注:如果最后四个字符总是你正在寻找的数量,这是可能更容易做right()
:
谢谢大家,快速帮助。非常感激!除了没有评论的减号。不过,如果有评论,我也会感谢你。 –
用数字表
declare @string varchar(max)
set @string='abc1234'
select top 1 substring(@string,n,len(@string))
from
numbers
where n<=len(@string)
and isnumeric(substring(@string,n,1))=1
order by n
输出:在SQL Server 1234
使用PATINDEX
就可以实现它,就像这样 -
DECLARE @test table
(
id INT,
player varchar(100)
)
INSERT @test
VALUES (1,'aaa1234'),
(2,'bac8123'),
(3,'g-2391')
SELECT
MAX(CONVERT(INT, LTRIM(SUBSTRING(player, PATINDEX('%[0-9]%', player), LEN(player)))))
FROM @test
尝试:
Select MAX(RIGHT(XID,17))
from table
您也可以使用此方法
CREATE TABLE #Tmp
(
XID VARCHAR(20)
)
INSERT INTO #Tmp(XID)
VALUES ('aaa1234'), ('bac8123'), ('g-2391')
SELECT MAX(RIGHT(XID, LEN(XID) - 3))
FROM #Tmp
合理的问题。不值得downvote。 –