【发布时间】:2019-07-23 15:25:10
【问题描述】:
我有一个旧的 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 语句更好地实现。我怎么能这样做?
【问题讨论】:
-
我认为您需要提供更多示例数据以及对您正在寻找的格式的更好解释。你如何区分“5个字符”和“一大堆文字”?
-
是的,我同意你的观点。我添加了更多上下文并阐明了预期结果。
-
字符串中的所有内容都是“字符”——包括“空格”字符。您需要更好地解释您的要求。您的“澄清”没有澄清任何事情。在您的示例中,“quick”也是由空格包围的五个字母的子字符串,就像“NNNNN”一样 - 那么为什么要单独选择“NNNNN”?
-
@mathguy - 虽然仍然存在关于输入格式的问题,但 OP 没有使期望的结果更清晰是不正确的。您对发布的代码 sn-p 有错误的事实了解得太多了。
-
为您节省更多麻烦的解决方案是将该列拆分为五个不同的列,分别代表每个是/否值的实际含义。
标签: sql oracle regexp-like