表格包含示例数据:
ID ANPR_TEXT
-------------
1 16AH22551
2 DL8CM8797
在此示例中,我想选择16AH22551
行。
我试过了:
select ANPR_TEXT,
to_number(regexp_substr(ANPR_TEXT,'\d+$'))
from TXN_SPEED_CAM;
但它没有用。请有人帮帮忙!
答案 0 :(得分:0)
我需要16AH22551
更新 OP希望至少计数匹配,而非完全匹配。
来自POSIX Metacharacters in Oracle Database Regular Expressions
的文档{m,}
间隔 - 至少计数
匹配前面的子表达式的至少m次出现。
表达式a {3,}匹配字符串aaa和aaaa,但不匹配 匹配aa。
因此,您需要使用 {m,} 表达式,这意味着它将匹配至少m次出现。 REGEXP_LIKE(anpr_text, '[[:digit:]]{2,}[[:alpha:]]{2,}[[:digit:]]{4,}')
例如,
SQL> CREATE TABLE t(ID NUMBER, anpr_text VARCHAR2(20));
Table created.
SQL>
SQL> INSERT INTO t VALUES(1, '16AH22551');
1 row created.
SQL> INSERT INTO t VALUES(2, 'DL8CM8797');
1 row created.
SQL> INSERT INTO t VALUES(3, '123ABC8797 ');
1 row created.
SQL> INSERT INTO t VALUES(4, 'HR29AE5806 ');
1 row created.
SQL>
SQL> COMMIT;
Commit complete.
SQL>
SQL> SELECT * FROM t
2 WHERE REGEXP_LIKE(anpr_text, '[[:digit:]]{2,}[[:alpha:]]{2,}[[:digit:]]{4,}');
ID ANPR_TEXT
---------- --------------------
1 16AH22551
3 123ABC8797
4 HR29AE5806
SQL>
对于精确的模式匹配:
如果你有前两位数的固定模式,然后是两个字母,然后是至少4位数,那么你可以使用 REGEXP_LIKE 进行模式匹配。
例如,
SQL> CREATE TABLE t(ID NUMBER, anpr_text VARCHAR2(20));
Table created.
SQL>
SQL> INSERT INTO t VALUES(1, '16AH22551');
1 row created.
SQL> INSERT INTO t VALUES(2, 'DL8CM8797');
1 row created.
SQL> INSERT INTO t VALUES(3, '123ABC8797');
1 row created.
SQL>
SQL> COMMIT;
Commit complete.
SQL>
SQL> SELECT * FROM t
2 WHERE REGEXP_LIKE(anpr_text, '[[:digit:]]{2}[[:alpha:]]{2}[[:digit:]]{4}');
ID ANPR_TEXT
---------- --------------------
1 16AH22551
SQL>