REGEXP_LIKE在数字范围之间

时间:2017-01-16 11:37:41

标签: sql between regexp-like

有人可以在下面完成代码。

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

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

当前代码有效,但是带回一个数字,所以我试图将它缩小到6位数。我尝试了一些但没有运气。

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

3 个答案:

答案 0 :(得分:2)

试试这个:

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

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

答案 1 :(得分:0)

您可以REGEXP_SUBSTR从指定字段中获取6位数字,并使用between进行比较

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

请注意,如果存在比6位更大的序列,则上述解决方案将考虑前6位数。如果您想要连续6位数字,解决方案必须是另一个数字。

答案 2 :(得分:0)

如果要获取所有仅包含数值的记录,则可以在下面的查询中使用

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

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