Oracle
 sql >> база данни >  >> RDS >> Oracle

2 начина за връщане на редове, които съдържат само небуквени и цифрови знаци в Oracle

По-долу са дадени два метода за връщане на редове, които съдържат само небуквени и цифрови знаци в Oracle Database.

Буквено-цифровите знаци са букви и цифри.

Примерни данни

Ще използваме следните данни за нашите примери:

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;

Резултат:

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

Опция 1:Сравнете с [:alnum:]

Можем да използваме REGEXP_LIKE() функция, за да сравни стойността с регулярен израз, след което да я отречете с NOT оператор.

Възможността за регулярни изрази на Oracle включва поддръжка за POSIX символните класове. Следователно можем да използваме [:alnum:] POSIX символен клас в нашите регулярни изрази, за да намерите редовете, които съдържат небуквени и цифрови знаци.

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

Резултат:

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

Това върна само онези редове, които съдържат само небуквени и цифрови знаци. Ако един ред съдържа както буквено-цифрови, така и не-буквени знаци, той не се връща.

Опция 2:Посочете диапазон от знаци

Друг начин да го направите е да посочите диапазон от знаци във вашия регулярен израз.

Пример:

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

Резултат:

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

В този случай моят диапазон на изключване не обхваща буквено-цифрови знаци като é , É и ø , и така изходът не е истинско представяне на небуквени и цифрови знаци.

Ето пример за разширяване на диапазона, за да изключите тези знаци от изхода:

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

Резултат:

()
[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. Функция NULLIF() в Oracle

  2. BatchUpdateException:партидата няма да бъде прекратена

  3. Изтрийте с Join в Oracle sql Query

  4. грешка:ORA-65096:невалидно име на общ потребител или роля в oracle

  5. Как да намеря зависимости в пакет оракул?