sql - REGEXP_LIKE 用于 5 个字符的子字符串中任意位置的字符
问题描述
我有一个旧的 Access 查询,我正在尝试将其转换为 Oracle SQL。它的一部分查看可以包含一大堆文本的字符串,而字符串的另一部分是一系列五个字符,例如:
NNNNN
我想要做的是找到这些字符中的任何一个,Y
但只有在特定格式中,在 5 个字符内。例如,整个字符串可能是:
The quick brown fox jumps over the lazy dog NNNNN
我不想退货,因为这五个NNNNN
不包含Y
.
当前查询执行以下操作:
SELECT *
FROM foo
WHERE
(
bar LIKE '%Y____%' OR
bar LIKE '%_Y___%' OR
bar LIKE '%__Y__%' OR
bar LIKE '%___Y_%' OR
bar LIKE '%____Y%'
)
但是,我认为这可以通过单个 REGEXP_LIKE 语句更好地实现。我怎么能这样做?
解决方案
你不能做这样的事情吗?
where bar like '%Y%' and length(b) >= 5
这基本上是您的逻辑,不需要正则表达式。
如果您正在寻找 5 个字符,除了 1Y 之外都是 N,那么我希望您的like
解决方案是:
where bar like '%YNNNN%' or bar like '%NYNNN%' or . . .
一个简单的正则表达式版本对我来说并不明显。
一种接近的方法是:
where regexp_like(bar, '[YN]{5}') and -- has a substring with 5 characters, all of which are Y and N
not regexp_like(bar, 'Y[N]{0-3}Y' -- has no substring with Y followed by 0-3 Ns and another Y
这可能会在其他文本中的某些单词上失败。但是,Y 后跟 0 个或多个 N 后跟 Y 在英语单词中是非常不寻常的。
当然,也有明显的:
where regexp_like(bar, 'YNNNN|NYNNN|NNYNN|NNNYN|NNNNY')
推荐阅读
- spring - Spring Data JPA 自定义查询中的 QuerySyntaxException
- json - Swift4.2解析json用于pickerview
- java - 为什么下面的代码块应该返回 false?
- kotlin - TornadoFX 按键监听器问题
- c# - 如何从另一个窗体应用程序打开窗体应用程序
- mysql - LEFT OUTER JOIN 产生意外结果
- javascript - 单击按钮时打开/关闭动画汉堡菜单
- jquery - 如何在 Jquery 中获取过去 9 个星期日的日期?
- vb.net - 我想知道我在 VB.NET 上使用了多少次“退格”
- python - 根据单行中的频率将分类变量转换为数字