【发布时间】:2017-07-29 05:20:23
【问题描述】:
大家都知道,Oracle/PLSQL 中的REGEXP_INSTR 命令允许您在字符串中搜索正则表达式模式。它还提供了三个参数,分别是start_position、nth_appearance、return_option。
Redshift 也支持same command,但不支持所有三个参数,因此以下完全在 Oracle/PLSQL 中运行的查询在 Redshift 中无法运行。
substr(some_string, REGEXP_INSTR(some_string, '/regex1/', 1,1,1), 15)); (redshift 使用 substring 而不是 substr)
在上面的查询中,REGEXP_INSTR 返回模式出现后字符的位置,因为我们已将 return_option 设置为 1。 (即如果匹配在位置 3 结束,它将返回 4。因此,从位置 4 开始,将从 "some_string" 中提取 15 个字符)
我们无法在 Redshift 中将返回选项设置为 1,因为 REGEXP_INSTR 命令不支持参数。我正在寻找替代方法来返回匹配发生位置的下一个位置值。
【问题讨论】:
-
您的描述不太正确。除非
/regex1/匹配单个字符,否则返回值将高于 4 - 它是匹配部分结束后的位置,而不是匹配开始后的位置;它将从该位置获取 15 个字符,即 4 到 18 而不是 4 到 15。