REGEXP_LIKE 之间的数字范围

REGEXP_LIKE between number range

有人可以完成下面的代码吗?

我只想在 RMK 字段中的任意位置查找 6 位数字范围,介于 100000 和 999999 之间

 REGEXP_LIKE(RMKADH.RMK, '[[:digit:]]') 

当前代码有效,但会带回任何带数字的内容,因此我试图将其缩小到 6 位数字。我已经尝试了一些,但没有成功。

编辑: 如果存在 6 位数字,我想标记此字段。引用将始终只有 6 位数字,不多也不少。但由于它是一个自由文本字段,它可以在任何地方并包含任何内容。 我确实想要标记的示例输出:>abc123456markj< = 已标记。 我不想标记的输出:>Mark 23647282< 因为它找到的数字长度超过 6 个字符我知道它不是有效参考。

试试这个:

REGEXP_LIKE(RMKADH.RMK, '[1-9][[:digit:]]{5}') AND length(RMKADH.RMK) = 6

有关详细信息,请参阅:Multilingual Regular Expression Syntax

您可以执行 REGEXP_SUBSTR 从给定字段中获取 6 位数字并使用 between

进行比较
select * from t
where to_number(regexp_substr(col,'[[:digit:]]{6}')) between 100000 and 999999;
;

请注意,如果存在大于 6 位的序列,上述解决方案将考虑前 6 位。如果你想对任何 6 个连续的数字做,解决方案必须是不同的。

如果你想获取所有只有数值的记录,你可以使用下面的查询

    REGEXP_LIKE(RMKADH.RMK, '^[[:digit:]]+$');

以上将匹配字符串中从头到尾的任意数量的数字。因此,如果您的数字从 1 位到任意位数,这将很有用。

SELECT
    to_number(regexp_replace('abc123456markj', '[^[:digit:]]', '')) digits
FROM
    dual
WHERE
    REGEXP_LIKE('abc123456markj', '[[:digit:]]')
    AND
    length(regexp_replace('abc123456markj', '[^[:digit:]]', '')) = 6
    AND
    regexp_replace('abc123456markj', '[^[:digit:]]', '') BETWEEN 100000 AND 999999;