从varchar列中选择max int

Chr*_*tal 13 t-sql sql-server

我试图从varchar列中检索包含数字和字符串的最大数字.我正在使用的数据示例:

BoxNumber
123
A5
789
B1

我需要从列中返回最大数字(在这种情况下为789),同时忽略A5和B1的非数字值.

我找到了使用自定义函数来解决问题的解决方案,但我需要一些可以执行即席查询而不依赖于自定义函数或过程的东西.

SQL*_*ace 26

你需要一个组合,因为isnumeric为以下事情返回1

select isnumeric('+'),isnumeric('5d2') 
Run Code Online (Sandbox Code Playgroud)

你的where子句就像这样

WHERE VALUE NOT LIKE '%[a-z]%'
        AND ISNUMERIC(VALUE) = 1

create table #bla (value varchar(50))
insert #bla values('123')
insert #bla values('a5')
insert #bla values('789')
insert #bla values('b1')

SELECT MAX(CAST(value AS Int)) FROM #bla
WHERE VALUE NOT LIKE '%[a-z]%'
    AND ISNUMERIC(VALUE) = 1
Run Code Online (Sandbox Code Playgroud)

我在这里写了关于这个ISNUMERIC麻烦


cms*_*sjr 8

你可以试试

Select MAX(BoxNumber) from {table} where IsNumeric(BoxNumber) = 1
Run Code Online (Sandbox Code Playgroud)


小智 6

为什么不

SELECT MAX(CAST(Value AS Int)) FROM #bla 
WHERE ISNUMERIC(Value)=1 
    AND Value LIKE '%[0-9]%' 
Run Code Online (Sandbox Code Playgroud)

那么你只是在处理数字字符串。在这种情况下,您可能不需要 ISNUMERIC()