2016-03-04 53 views
1

我有一列(XID),其中包含varchar(20)序列,格式如下:xxxzzzzzz其中X是任意字母或短划线和zzzzz是一个数字。查询将在列中具有字母数字序列的表中搜索最高数字值

我想写一个查询,将剥离xxx和评估并返回哪个是表列中的最高数字。

例如:

aaa1234 
bac8123 
g-2391 

后,我会得到8123个

感谢的结果!

+0

合理的问题。不值得downvote。 –

回答

1

有点痛苦,但有可能。这里是假设第一个数字后,只有数字出现(你实际上指定为的情况下)的一种方法:

select max(cast(stuff(col, 1, patindex('%[0-9]%', col) - 1, '') as float)) 
from t; 

注:如果最后四个字符总是你正在寻找的数量,这是可能更容易做right()

+0

谢谢大家,快速帮助。非常感激!除了没有评论的减号。不过,如果有评论,我也会感谢你。 –

1

用数字表

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

1

使用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 
1

您也可以使用此方法

CREATE TABLE #Tmp 
(
    XID VARCHAR(20) 
) 
INSERT INTO #Tmp(XID) 
VALUES ('aaa1234'), ('bac8123'), ('g-2391') 

SELECT MAX(RIGHT(XID, LEN(XID) - 3)) 
FROM #Tmp