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

2 sposoby zwracania wierszy zawierających tylko znaki niealfanumeryczne w Oracle

Poniżej znajdują się dwie metody zwracania wierszy zawierających tylko znaki niealfanumeryczne w bazie danych Oracle.

Znaki alfanumeryczne to znaki alfabetu i znaki numeryczne.

Przykładowe dane

W naszych przykładach użyjemy następujących danych:

CREATE TABLE t1 (
    c1 varchar(255) NULL
    );

INSERT INTO t1 (c1) 
    WITH c AS (
        SELECT 'Music' FROM DUAL UNION ALL
        SELECT 'Live Music' FROM DUAL UNION ALL
        SELECT 'Café' FROM DUAL UNION ALL
        SELECT 'Café Del Mar' FROM DUAL UNION ALL
        SELECT '100 Cafés' FROM DUAL UNION ALL
        SELECT '[email protected]' FROM DUAL UNION ALL
        SELECT '1 + 1' FROM DUAL UNION ALL
        SELECT '()' FROM DUAL UNION ALL
        SELECT '[email protected]#&()–[{}]:;'',?/*' FROM DUAL UNION ALL
        SELECT '`~$^+=<>“' FROM DUAL UNION ALL
        SELECT '$1.50' FROM DUAL UNION ALL
        SELECT 'Player 456' FROM DUAL UNION ALL
        SELECT '007' FROM DUAL UNION ALL
        SELECT 'é' FROM DUAL UNION ALL
        SELECT 'É' FROM DUAL UNION ALL
        SELECT 'é 123' FROM DUAL UNION ALL
        SELECT 'ø' FROM DUAL UNION ALL
        SELECT 'ø 123' FROM DUAL)
SELECT * FROM c;

SELECT c1 FROM t1;

Wynik:

Music
Live Music
Café
Café Del Mar
100 Cafés
[email protected]
1 + 1
()
[email protected]#&()–[{}]:;',?/*
`~$^+=<>“
$1.50
Player 456
007
é
É
é 123
ø
ø 123

Opcja 1:Porównaj z [:alnum:]

Możemy użyć Oracle REGEXP_LIKE() funkcji do porównania wartości z wyrażeniem regularnym, a następnie zanegowania jej za pomocą NOT operatora.

Możliwości wyrażeń regularnych Oracle obejmują obsługę klas znaków POSIX. Dlatego możemy użyć [:alnum:] Klasa znaków POSIX w naszych wyrażeniach regularnych do znajdowania wierszy zawierających znaki niealfanumeryczne.

SELECT c1 FROM t1 
WHERE NOT REGEXP_LIKE(c1, '[[:alnum:]]');

Wynik:

()
[email protected]#&()–[{}]:;',?/*
`~$^+=<>“

To zwróciło tylko te wiersze, które zawierają tylko znaki niealfanumeryczne. Jeśli wiersz zawiera zarówno znaki alfanumeryczne, jak i niealfanumeryczne, nie jest on zwracany.

Opcja 2:Określ zakres znaków

Innym sposobem na to jest określenie zakresu znaków w wyrażeniu regularnym.

Przykład:

SELECT c1 FROM t1 
WHERE NOT REGEXP_LIKE(c1, '[A-Za-z0-9]');

Wynik:

()
[email protected]#&()–[{}]:;',?/*
`~$^+=<>“
é
É
ø

W tym przypadku mój zakres wykluczeń nie obejmował znaków alfanumerycznych, takich jak é , É i ø , a więc dane wyjściowe nie są prawdziwą reprezentacją znaków niealfanumerycznych.

Oto przykład rozszerzenia zakresu, aby wykluczyć te znaki z danych wyjściowych:

SELECT c1 FROM t1 
WHERE NOT REGEXP_LIKE(c1, '[A-Za-zÀ-Þß-ÿ0-9]');

Wynik:

()
[email protected]#&()–[{}]:;',?/*
`~$^+=<>“

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przykład Oracle FOR LOOP REVERSE

  2. C#:Przekaż typ zdefiniowany przez użytkownika do procedury składowanej Oracle

  3. Pobierz wartość z FieldA, wyślij do funkcji db, zwróć wartość do FieldB

  4. Przeszukaj wszystkie pola we wszystkich tabelach pod kątem określonej wartości (Oracle)

  5. Jak rozwiązywać problemy z ORA-02049 i ogólnie blokować problemy z Oracle?