题解 | #截取出年龄#

截取出年龄

https://www.nowcoder.com/practice/b8d8a87fe1fc415c96f355dc62bdd12f

使用正则表达式解决

三个函数

1.REGEXP_SUBSTR 函数

REGEXP_SUBSTR ( source_string, pattern [, position [, occurrence [, parameters ] ] ] )

source_string
要搜索的字符串表达式(如列名称)。
pattern
表示 SQL 标准正则表达式模式的字符串文本。
position
指示在 source_string 中开始搜索的位置的正整数。此位置基于字符数而不是字节数,这是为了将多字节字符作为单字符计数。默认值为 1。如果 position 小于 1,则搜索从 source_string 的第一个字符开始。如果 position 大于 source_string 中的字符数量,则结果为空字符串 ("")。
出现
一个正整数,指示要使用的模式的匹配项。REGEXP_SUBSTR 会跳过第一个 occurrence -1 匹配项。默认值为 1。如果 occurrence 小于 1 或大于 source_string 中的字符串,则会忽略搜索,并且结果为 NULL。
参数
一个或多个字符串,指示函数与模式的匹配方式。可能的值包括:

c – 执行区分大小写的匹配。默认情况下,使用区分大小写的匹配。
i – 执行不区分大小写的匹配。

e – 使用子表达式提取子字符串。
如果 pattern 包含一个子表达式,REGEXP_SUBSTR 会使用 pattern 中的第一个子表达式来匹配子字符串。REGEXP_SUBSTR 仅考虑第一个子表达式;其他子表达式会被忽略。如果模式没有子表达式,REGEXP_SUBSTR 会忽略“e”参数。
p – 使用 Perl 兼容正则表达式 (PCRE) 方言解释模式。

2.?=... 正先行断言

?=... 正先行断言,表示第一部分表达式之后必须跟着 ?=...定义的表达式。

返回结果只包含满足匹配条件的第一部分表达式。 定义一个正先行断言要使用 ()。在括号内部使用一个问号和等号: (?=...)。

正先行断言的内容写在括号中的等号后面。 例如,表达式 (T|t)he(?=\sfat) 匹配 The 和 the,在括号中我们又定义了正先行断言 (?=\sfat) ,即 The 和 the 后面紧跟着 (空格)fat。

"(T|t)he(?=\sfat)" => >The fat cat sat on the mat.

3.?<= ... 正后发断言

正后发断言 记作(?<=...) 用于筛选所有匹配结果,筛选条件为 其前跟随着断言中定义的格式。

例如,表达式 (?<=(T|t)he\s)(fat|mat) 匹配 fat 和 mat,且其前跟着 The 或 the。
"(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.

完整代码:
select
  regexp_substr(profile, '(?<=(,))[0-9]{2}(?=,)') as age,
  count(*) as number
from
  user_submit
group by
  age;





#字节跳动收购沐瞳科技##产品推广运营实习##逃离互联网#
全部评论

相关推荐

头像
10-16 09:58
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务