我使用的是postgresql,我在制定正确的sql查询时遇到了问题。这个问题的标题听起来可能很奇怪,但这正是我想要达到的目标。我目前正在对一个特定的表执行数据管理。如果我有一个表产品包含:

id | designation
---------------------
1  | IR15A1021
2  | IR15A1001
3  | IR15A1050
4  | AB100
5  | AR100

我想做的是:
1)只获取其模式以“IR15A”开头的指定记录的整数子字符串。和by integer子字符串,表示起始字符串“IR15A”后面的数字。(102110011050)
2)在这种情况下得到最大整数子串:
maximum integer substring : 1050

因为所有其他IR15A的最大子串都小于它(1021和1001)。
假设条件正确。
1)IR15A后面的子串总是整数,所以不用担心类型,它总是整数。
2)忽略其他指定模式。只有IR15A。
我只是设法获得了'%1515%'通配符搜索,但我还没有找到任何解决方案,从中删除整数子串,并与其他人进行比较,以获得最大值。谢谢!

最佳答案

试试这个:

select max(cast(substring(designation from '....$') as int))
from tab
where designation like 'IR15A%'

使用IR15A只获取like 'IR15A%'的行
使用IR15A移除substring(designation from '....$')
使用cast将其转换为int
使用max获取max()
Sql Fiddle演示

07-28 02:55