Regex Redshift SQL能否执行不区分大小写的正则表达式计算?

Regex Redshift SQL能否执行不区分大小写的正则表达式计算?,regex,posix,amazon-redshift,pcre,Regex,Posix,Amazon Redshift,Pcre,文档中说regexp_instr()和~是区分大小写的Posix求值函数和运算符。 是否有用于区分大小写的Posix语法,或用于基于PCRE的函数或运算符的插件 在红移查询中尝试的PCRE示例,由于POSIX的不足,无法按预期工作 select A.target , B.pattern , regexp_instr(A.target, B.pattern) as rx_instr_position , A.target ~ B.pattern as tilde_operator , reg

文档中说regexp_instr()和~是区分大小写的Posix求值函数和运算符。 是否有用于区分大小写的Posix语法,或用于基于PCRE的函数或运算符的插件

在红移查询中尝试的PCRE示例,由于POSIX的不足,无法按预期工作

select 
  A.target
, B.pattern
, regexp_instr(A.target, B.pattern) as rx_instr_position
, A.target ~ B.pattern as tilde_operator
, regexp_instr(A.target
, 'm/'||B.pattern||'/i') as rx_instr_position_icase
from
(      select 'AbCdEfffghi' as target 
 union select 'Chocolate' as target 
 union select 'Cocoa Latte' as target 
 union select 'coca puffs, delivered late' as target
) A
,
(      select 'choc.*late' as pattern 
 union select 'coca.*late' as pattern 
 union select 'choc\w+late' as pattern
 union select 'choc\\w+late' as pattern
) B

回答你的问题:据我所知,没有红移兼容的语法或插件。如果您可以使用一种变通方法:我们最终在字符串周围使用了
lower()
,以匹配:

select
  A.target
, B.pattern
, regexp_instr(A.target, B.pattern) as rx_instr_position
, A.target ~ B.pattern as tilde_operator
, regexp_instr(A.target, 'm/'||B.pattern||'/i') as rx_instr_position_icase
, regexp_instr(lower(A.target), B.pattern) as rx_instr_position_icase_by_lower
from
(      select 'AbCdEfffghi' as target
 union select 'Chocolate' as target
 union select 'Cocoa Latte' as target
 union select 'coca puffs, delivered late' as target
) A
,
(      select 'choc.*late' as pattern 
 union select 'coca.*late' as pattern 
 union select 'choc\w+late' as pattern
 union select 'choc\\w+late' as pattern
) B

回答你的问题:据我所知,没有红移兼容的语法或插件。如果您可以使用一种变通方法:我们最终在字符串周围使用了
lower()
,以匹配:

select
  A.target
, B.pattern
, regexp_instr(A.target, B.pattern) as rx_instr_position
, A.target ~ B.pattern as tilde_operator
, regexp_instr(A.target, 'm/'||B.pattern||'/i') as rx_instr_position_icase
, regexp_instr(lower(A.target), B.pattern) as rx_instr_position_icase_by_lower
from
(      select 'AbCdEfffghi' as target
 union select 'Chocolate' as target
 union select 'Cocoa Latte' as target
 union select 'coca puffs, delivered late' as target
) A
,
(      select 'choc.*late' as pattern 
 union select 'coca.*late' as pattern 
 union select 'choc\w+late' as pattern
 union select 'choc\\w+late' as pattern
) B

Redshift现在通过添加函数参数为不区分大小写的正则表达式标志提供了直接解决方案:

使用提供的查询示例的语法为:

select
  A.target
, B.pattern
, regexp_instr(A.target, B.pattern) as rx_instr_position
, A.target ~ B.pattern as tilde_operator
, regexp_instr(A.target, B.pattern, 1, 1, 0, 'i') AS rx_instr_position_icase
from
(      select 'AbCdEfffghi' as target
 union select 'Chocolate' as target
 union select 'Cocoa Latte' as target
 union select 'coca puffs, delivered late' as target
) A
,
(      select 'choc.*late' as pattern 
 union select 'coca.*late' as pattern 
 union select 'choc\w+late' as pattern
 union select 'choc\\w+late' as pattern
) B

Redshift现在通过添加函数参数为不区分大小写的正则表达式标志提供了直接解决方案:

使用提供的查询示例的语法为:

select
  A.target
, B.pattern
, regexp_instr(A.target, B.pattern) as rx_instr_position
, A.target ~ B.pattern as tilde_operator
, regexp_instr(A.target, B.pattern, 1, 1, 0, 'i') AS rx_instr_position_icase
from
(      select 'AbCdEfffghi' as target
 union select 'Chocolate' as target
 union select 'Cocoa Latte' as target
 union select 'coca puffs, delivered late' as target
) A
,
(      select 'choc.*late' as pattern 
 union select 'coca.*late' as pattern 
 union select 'choc\w+late' as pattern
 union select 'choc\\w+late' as pattern
) B

选择“HELLO”~*“el”
=true


这是当前未记录的(2020-11-05)

选择“HELLO”~*'el'
=true


这是目前未记录的(2020-11-05)

您希望在POSIX正则表达式中使用什么模式?您希望在POSIX正则表达式中使用什么模式?