Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jaka jest różnica między (*) i .* w regexp?

Wygląda na to, że w Oracle 11 * i + wzorce (bez niczego przed nimi) generują dopasowania o zerowej szerokości. Więc (*) i (+) przechwytują grupy () zawierające wzorce o zerowej szerokości * lub + odpowiednio.

Wszystkie te zapytania zwracają wiersz:

SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '*' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '(*)' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '^*' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '^(*)' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '*1' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '+' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '(+)' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '^+' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '^(+)' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '+1' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '^+1' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '+1$' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '^+1$' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '()' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '12', '1(*)2' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '12', '1(+)2' );

Te zapytania nie zwracają żadnych wierszy:

SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '*2' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '^*$' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '^+$' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '12', '11(*)2' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '12', '11(+)2' );

Ponadto dopasowanie dowolnego wzorca do NULL lub ciąg znaków w NULL wzorzec nie zwróci żadnych wierszy:

SELECT * FROM DUAL WHERE REGEXP_LIKE( NULL, '*' );
SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', NULL );

Korzystanie z REGEXP_SUBSTR :

SELECT REGEXP_SUBSTR( '1', '+' ) FROM DUAL;

Wyprowadza pojedynczy wiersz zawierający NULL .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego SQL*Plus zatwierdza przy wyjściu?

  2. Zapytanie SQL do zwrócenia N wierszy z podwójnego

  3. Zmodyfikuj zapytanie widoku zmaterializowanego

  4. W Oracle, w odniesieniu do składni - jak przekonwertować składnię (+) na nowoczesną konwencjonalną JOIN?

  5. Generowanie skryptu SQL*Plus za pomocą SQL*Plus