选择Oracle左侧有两位数字,右侧有四位数字的记录

时间:2015-04-08 06:34:50

标签: sql oracle oracle11g

表格包含示例数据:

ID   ANPR_TEXT
-------------
1    16AH22551 
2    DL8CM8797 

在此示例中,我想选择16AH22551行。

我试过了:

select ANPR_TEXT, 
       to_number(regexp_substr(ANPR_TEXT,'\d+$'))
  from TXN_SPEED_CAM;

但它没有用。请有人帮帮忙!

1 个答案:

答案 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>