如何从字母数字字符串中提取10个连续数字?

时间:2014-06-25 13:03:14

标签: sql regex string oracle11g oracle-sqldeveloper

这将告诉我text_field值是否由10个连续数字组成。现在,如果我需要在新字段中提取这些数字,该怎么办呢?这会怎么样?

select text_field, 
case when regexp_like(text_field,'|^[0-9]{10}$') then 'Y' else 'N' end check_col
from some_table

2 个答案:

答案 0 :(得分:1)

它应该是这样的。

SELECT text_field REGEXP_SUBSTR(text_field, '([[:digit:]]{10})$') FROM some_table;

检查此功能REGEXP_SUBSTR(source, regexp, position, occurrence, modes)了解详情。

REGEXP_SUBSTR(源,正则表达式,位置,事件,模式)返回一个字符串,其中源部分与正则表达式匹配。如果匹配尝试失败,则返回NULL。您可以将REGEXP_SUBSTR与单个字符串或列一起使用。您可以在SELECT子句中使用它来仅检索列的某个部分。 position参数指定源字符串中匹配尝试应该开始的字符位置。第一个字符的位置为1. occurrence参数指定要获取的匹配项。将其设置为1以获得第一场比赛。如果指定更高的数字,Oracle将继续尝试匹配从上一个匹配结束开始的正则表达式,直到它找到您指定的多个匹配项。然后返回最后一个匹配。如果匹配较少,则返回NULL。不要将此参数与反向引用混淆。 Oracle不提供返回捕获组匹配的字符串部分的函数。最后三个参数是可选的。

SELECT REGEXP_SUBSTR(column, 'regexp') FROM table;
match := REGEXP_SUBSTR('subject', 'regexp', 1, 1, 'i')

答案 1 :(得分:1)

select text_field, regexp_substr(text_field, '[[:digit:]]{10}'),
case when regexp_like(text_field,'[[:digit:]]{10}') then 'Y' else 'N' end check_col
from some_table

这很有效。