编写SQL查询去除非数字字符并获取数值最大值的方法
解决方案
很简单,只需要把你原来用来提取数值的逻辑包裹在MAX()聚合函数里,同时记得把提取到的字符串转成整数类型(避免字符串排序导致的错误),就能直接得到最大值了。
完整的SQL语句如下:
SELECT MAX(CAST(stuff(Round, 1, patindex('%[0-9]%', Round)-1, '') AS INT)) AS MaxRoundNumber FROM Table_LKP_RoundInfo
关键细节说明:
- 你的原
stuff(Round, 1, patindex('%[0-9]%', Round)-1, '')部分已经能正确提取出Round字段里的数字字符串(比如Round18→'18') - 必须用
CAST(... AS INT)把提取到的字符串转为整数类型:如果直接对字符串取MAX,会按字符顺序比较,导致'9'被判定为比'18'大,这显然不是我们想要的结果 MAX()函数会对所有转换后的整数进行聚合计算,直接返回最大的那个值(也就是你要的18)
内容的提问来源于stack exchange,提问作者user3754858




