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

Sql 如何从字母数字字符串中提取10个连续数字?,sql,regex,string,oracle11g,oracle-sqldeveloper,Sql,Regex,String,Oracle11g,Oracle Sqldeveloper,这将告诉我文本字段值是否由10个连续数字组成。现在,如果我需要在一个新字段中提取这些数字呢。那怎么办 select text_field, case when regexp_like(text_field,'|^[0-9]{10}$') then 'Y' else 'N' end check_col from some_table 应该是这样的 SELECT text_field REGEXP_SUBSTR(text_field, '([[:digit:]]{10})$') FROM som

这将告诉我文本字段值是否由10个连续数字组成。现在,如果我需要在一个新字段中提取这些数字呢。那怎么办

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

应该是这样的

SELECT text_field REGEXP_SUBSTR(text_field, '([[:digit:]]{10})$') FROM some_table;
检查此函数
REGEXP\u SUBSTR(源、REGEXP、位置、引用、模式)
了解详细信息

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

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

这是可行的。

|^[0-9]{10}$不被接受。[[:digit:][{10}很容易被接受。:)老实说,我看到的是函数,而不是正则表达式:)这个
(|^[0-9]{10})$
也可以工作。我将编辑答案。奇怪。这两个表达式在这里都适用。看看这个,这真的很有趣。它在这里不起作用。使用Oracle SQL Developer。但这又有什么关系呢?也许这与Oracle上的正则表达式语法有关。真傻:)我以后再查;让我知道你是否能让它在这段时间内工作。
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