首页 > 解决方案 > REGEXP_SUBSTR_GPL 未列出,我不清楚它需要什么参数。为什么要在 REGEXP_SUBSTR 上使用它?

问题描述

我试图在工作中分解前雇员的代码,该代码使用 Teradata SQL 助手中的一系列正则表达式从字符串中提取数据。

他们主要依靠以下循环:

WHEN (WHEN REGEXP_INSTR(source, pattern, 1, 1, 0 , 'i')(INT)) > 0
THEN
    (REGEXP_SUBSTR_GPL(source, pattern, 1, 1, 'i', 1) (FLOAT))

我试图弄清楚这是在做什么,但我不明白它是如何REGEX_SUBSTR_GPL工作的。我尝试查找它,它显然没有记录。我对 MySQL 很陌生,所以我想知道是否有人可以帮助我理解它在做什么,以及为什么有人会使用它REGEXP_SUBSTR()

此外,MySQL 中是否有一个命令可以让我找到有关此类函数的更多信息,以及有关它们采用哪些参数的更多信息?

谢谢你。

标签: mysqlsqlregexteradata-sql-assistant

解决方案


在评论中 nbk 的帮助下,我们有了答案!

REGEXP_SUBSTR 的基本格式是: REGEX_SUBSTR(source, pattern, start position, occurrence, matchOption)

对于 REGEXP_SUBSTR_GPL 它是: REGEX_SUBSTR_GPL(source, pattern, start position, occurrence, matchOption, subexp, RETURN0)

subexpression 选项允许您选择要返回的子组,而不是返回整个正则表达式的结果。每个子组由一组括号表示。因此,'([a-zA-Z]\w+)(@)(\w+)(\.)(\w+)'我们有以下子组:

  1. '([a-zA-Z]\w+)'
  2. '(@)'
  3. '(\w+)'
  4. '(\.)'
  5. '(\w+)'

当您设置subexp为等于时0,它以与 REGEXP_SUBSTR 相同的方式处理该函数。当您将其设置为大于零时,它会返回相应的子组(如果存在)。

请参阅以下示例

SELECT 'abc123@google.com' as text
,REGEXP_SUBSTR(text,'([a-zA-Z]\w+)(@)(\w+)(\.)(\w+)', 1, 1, 'i') as REGEXP_1
,REGEXP_SUBSTR_GPL(text,'([a-zA-Z]\w+)(@)(\w+)(\.)(\w+)',1,1,'i',0) as REGEXP_GPL_1
,REGEXP_SUBSTR_GPL(text,'([a-zA-Z]\w+)(@)(\w+)(\.)(\w+)',1,1,'i',1) as REGEXP_GPL_2
,REGEXP_SUBSTR_GPL(text,'([a-zA-Z]\w+)(@)(\w+)(\.)(\w+)',1,1,'i',2) as REGEXP_GPL_3
,REGEXP_SUBSTR_GPL(text,'([a-zA-Z]\w+)(@)(\w+)(\.)(\w+)',1,1,'i',3) as REGEXP_GPL_4
,REGEXP_SUBSTR_GPL(text,'([a-zA-Z]\w+)(@)(\w+)(\.)(\w+)',1,1,'i',4) as REGEXP_GPL_5
,REGEXP_SUBSTR_GPL(text,'([a-zA-Z]\w+)(@)(\w+)(\.)(\w+)',1,1,'i',5) as REGEXP_GPL_6

这将产生以下答案集:

文本 正则表达式_1 REGEXP_GPL_1 REGEXP_GPL_2 REGEXP_GPL_3 REGEXP_GPL_4 REGEXP_GPL_5 REGEXP_GPL_6
abc123@google.com abc123@google.com abc123@google.com abc123 @ 谷歌 . com

谢谢大家的帮助!


推荐阅读