首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL MAX函数和字符串

问SQL MAX函数和字符串
EN

Stack Overflow用户
提问于 2014-12-18 17:31:39
回答 2查看 6K关注 0票数 2

我有一个列nr,它包含12345-12345格式的字符串。短跑前后的数字可以是任意长度的。我想得到nr的最大值,只考虑到破折号后的部分。我试过了

SELECT MAX(nr) AS max_nr FROM table WHERE (nr LIKE '12345-%')

但是,这只适用于< 10的值(即,即使存在12345-10,也将以最大值形式返回12345-9 )。我想移除破折号并进行类型转换:

SELECT MAX(REPLACE(nr, '-', '')::int) AS max_nr FROM table WHERE (nr LIKE '12345-%')

然而,这当然返回没有破折号的结果。在结果中包含破折号和破折号之前的数字时,获得最大值的最佳方法是什么?

PostgreSQL 9.1

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-18 17:38:22

我不是PostGres方面的专家,但您可以使用regexp_replace('foobarbaz', 'b..', 'X')在破折号之后提取字符串,然后将数字转换为int。下面的查询将只从表中检索一行nr,其中nr大约为12345-%,按破折号之后的数字排序(首先是最大的数字)。

代码语言:javascript
复制
SELECT nr
FROM table WHERE (nr LIKE '12345-%')
ORDER BY regexp_replace(nr, '^\d+-', '')::integer DESC
LIMIT 1

上面的正则表达式移除前导数字和破折号,只留下最后一组数字。例如,54352-12345将变成12345.

正式文件。

这是一个说明它的用法的SQL Fiddle。

票数 2
EN

Stack Overflow用户

发布于 2014-12-18 17:38:49

使用带有位置函数的子字符串函数:http://www.postgresql.org/docs/8.1/static/functions-string.html在破折号后提取数字,然后在MAX函数中使用这个值,就像现在在代码中使用的那样。您也可以尝试使用to_number函数。

它看起来类似于这样:

代码语言:javascript
复制
MAX(substring(nr from position('-' in nr))::int)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27552399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档