【发布时间】:2017-04-22 16:21:52
【问题描述】:
当我在红移上使用负前瞻(类似(?!abc))时,
redshift 返回如下错误:
-- Find records that do not start with abc
select * from table_a where column_a ~ '^(?!abc).+$'
错误:PG::InternalError:错误:重复运算符之前的正则表达式无效。解析正则表达式时发生错误:'^(?>>>HERE>>>!abc).+$'。详细信息:---------------------------------------------错误: 重复运算符之前的正则表达式无效。解析正则表达式时发生错误:'^(?>>>HERE>>>!abc).+$'。代码:8002 上下文:T_regexp_init 查询:1039510 位置:funcs_expr.cpp:130
Redshift 似乎无法识别负前瞻...
有什么办法可以在 Redshift 上使用它吗?
【问题讨论】:
-
你的意图是什么?你需要匹配什么?字符串不等于
abc? Redshift 正则表达式风格是 POSIX,因此没有可用的环视。 -
感谢您的评论。我更新了问题以表明我的意图。但是没有可用的环视...? :(
-
那么,您想匹配任何不以
abc开头的条目吗?试试where column_a !~ '^abc'(虽然不知道如何正确使用否定) -
正则表达式字符串之前的所有内容(select * from table_a where column_a ~)都被硬编码到另一个系统,所以我有点需要一种方法来否定没有!~的表达式。但是看看你的cmets,我觉得它更容易使用!~。因此,我将与编写该代码的工程师交谈。再次感谢!
标签: regex amazon-redshift