Sql Postgres:选择列值的最大整数子字符串
我使用的是postgresql,但在制定正确的sql查询时遇到了问题。这个问题的标题可能听起来很奇怪,但这正是我想要实现的。我目前正在对一个特定的表执行数据整理。如果我有一个表产品包含:Sql Postgres:选择列值的最大整数子字符串,sql,regex,string,postgresql,substring,Sql,Regex,String,Postgresql,Substring,我使用的是postgresql,但在制定正确的sql查询时遇到了问题。这个问题的标题可能听起来很奇怪,但这正是我想要实现的。我目前正在对一个特定的表执行数据整理。如果我有一个表产品包含: id | designation --------------------- 1 | IR15A1021 2 | IR15A1001 3 | IR15A1050 4 | AB100 5 | AR100 我想做的是: 1) 仅获取的整数子串和精确地那些名称为且模式以“IR15A”开头的记录。和整数子
id | designation
---------------------
1 | IR15A1021
2 | IR15A1001
3 | IR15A1050
4 | AB100
5 | AR100
我想做的是:
1) 仅获取的整数子串和精确地那些名称为且模式以“IR15A”开头的记录。和整数子字符串,表示起始字符串“IR15A”后的数字。(102110011050)
2) 获取最大整数子字符串,因此在这种情况下:
maximum integer substring : 1050
因为所有其他IR15A的最大子字符串都小于它(1021和1001)
假设条件正确。
1) IR15A之后的子字符串始终是整数,因此不必担心类型,它将始终是整数。
2) 忽略其他指定模式。只有IR15A
我只成功地获得了“%IR15A%”通配符搜索,但还没有找到任何解决方案来从中删除整数子字符串,并将其与其他字符串进行比较以获得最大值。谢谢 试试这个:
select max(cast(substring(designation from '....$') as int))
from tab
where designation like 'IR15A%'
如“IR15A%”等获取具有IR15A
的行
子字符串(名称来自“......$”)
删除IR15A
李>
cast
max()获取max
值
演示哇!刚刚测试了一下,效果很好。接下来,你是如何在大脑中安装postgres的?xD我将在几分钟内接受这个答案。非常感谢。@muffin我很高兴能帮上忙:)请注意,只有当模式在
IR15A
之后有4位数字时,这才有效,在这种情况下,您应该使用right(名称,4)
而不是子字符串,因为您的模式匹配是不必要的。否则,使用正则表达式模式匹配贪婪限定符+1无论如何,因为您实际上解释了您的答案,但没有解释其局限性。示例:。regexp\u matches
返回一个数组,这让它变得有点尴尬。@CraigRinger感谢您的评论!你是对的,我的解决方案不是万能的,是为这种情况准备的。OP表示,2)忽略其他指定模式。只有IR15A。
IR15A后面是否总是有4位数字?或者可能会有所不同?