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() функция за сравняване на стойността с регулярен израз.

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

SELECT c1 FROM t1 
WHERE REGEXP_LIKE(c1, '^[[:alnum:]]+$');

Резултат:

Music
Café
007
é
É
ø

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

Обърнете внимание, че символът за интервал се счита за небуквен и цифров и така, ако искаме да включим интервали, можем да направим това:

SELECT c1 FROM t1 
WHERE REGEXP_LIKE(c1, '^[[:alnum:] ]+$');

Резултат:

Music
Live Music
Café
Café Del Mar
100 Cafés
Player 456
007
é
É
é 123
ø
ø 123

За да върнете всички редове, които съдържат буквено-цифрови знаци (дори редът да съдържа и не-буквени знаци), можем да направим това:

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

Резултат:

Music
Live Music
Café
Café Del Mar
100 Cafés
[email protected]
1 + 1
$1.50
Player 456
007
é
É
é 123
ø
ø 123

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

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

Пример:

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

Резултат:

Music
007

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

Ето защо ще трябва да бъдете внимателни, когато използвате този метод, в случай че случайно изключите знаци, които трябва да включите.

Ето го отново с диапазон, който включва тези знаци:

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

Резултат:

Music
Café
007
é
É
ø

Можем да включим пространства като това:

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

Резултат:

Music
Live Music
Café
Café Del Mar
100 Cafés
Player 456
007
é
É
é 123
ø
ø 123

И можем да използваме следното, за да включим всички редове, които съдържат знаци от нашия диапазон (дори и те да съдържат знаци извън този диапазон):

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

Резултат:

Music
Live Music
Café
Café Del Mar
100 Cafés
[email protected]
1 + 1
$1.50
Player 456
007
é
É
é 123
ø
ø 123

Или ако не искаме да включваме тези символи в Unicode, можем да го опростим до следното:

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

Резултат:

Music
Live Music
Café
Café Del Mar
100 Cafés
[email protected]
1 + 1
$1.50
Player 456
007
é 123
ø 123

Това не изключва тези уникод знаци от изхода, ако случайно споделят ред с буквено-цифрови знаци.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изберете и подредите по колони, които не са в Groupy By SQL израз - Oracle

  2. cx_Oracle:Как мога да получа всеки ред като речник?

  3. SQLDeveloper не показва таблици под връзки, където пише таблици

  4. Oracle PL/SQL получава IP на сървъра v4?

  5. Настройка на Oracle за потребителска схема по подразбиране (без промяна на сесия)