Oracle 最有效地使用非正则表达式

Oracle 最有效地使用非正则表达式,oracle,regexp-like,Oracle,Regexp Like,我正在寻找使用NOT regexp_的方法。为了以最有效的方式从字符串中排除各种术语,作为背景,此数据用于查找医院系统外发生的分娩: regexp_like(note_text,'(birth|home|deliver|ambulance|car).{0,20}(deliv|birth|home|ambulance|car)','i') and NOT regexp_like(note_text,'(apgar|CESAREAN|birth).{0,10}(minute|sect

我正在寻找使用NOT regexp_的方法。为了以最有效的方式从字符串中排除各种术语,作为背景,此数据用于查找医院系统外发生的分娩:

        regexp_like(note_text,'(birth|home|deliver|ambulance|car).{0,20}(deliv|birth|home|ambulance|car)','i')
and NOT regexp_like(note_text,'(apgar|CESAREAN|birth).{0,10}(minute|section)','i')
所以,我正在做一大堆不包括剖宫产和apgar评分的事情——我最好把它们分成类似的术语,比如

and NOT regexp_like(note_text,'(apgar).{0,10}(minute)','i')
and NOT regexp_like(note_text,'(CESAREAN).{0,10}(section|operation)','i')
为了提高效率


另外,由于类regexp_是一个运算符而不是一个函数,是否有一种方法可以在线查看它在做什么?

从性能角度看,您应该可以使用类似您的regexen结构将否定项包装成一个单独的项。但是请注意,您的两个示例方法不同,apgar部分将仅由第一个示例进行过滤。您可以通过单个正则表达式来查询嵌套查询的查询计划,即从选择x中选择y.note_文本从选择x中选择注释_文本。。。where regexp_likenote_text,x where note regex_like x.note_text,y where note regex_like y.note_text,在应用更复杂的过滤器之前减少结果集大小。也可能是ca?esarian.Performance-wise,您应该可以使用与您类似的regexen结构将否定项包装成一个单独的项。但是请注意,您的两个示例方法不同,apgar部分将仅由第一个示例进行过滤。您可以通过单个正则表达式来查询嵌套查询的查询计划,即从选择x中选择y.note_文本从选择x中选择注释_文本。。。其中regexp_likenote_text,x where note regex_like x.note_text,y where note regex_like y.note_text,在应用更复杂的过滤器之前减少结果集大小。也可能是ca?esarian。