Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

2 Cara Mengembalikan Baris yang Hanya Mengandung Karakter Alfanumerik di Oracle

Di bawah ini adalah dua metode untuk mengembalikan baris yang hanya berisi karakter alfanumerik di Oracle Database.

Karakter alfanumerik adalah karakter alfabet dan karakter numerik.

Contoh Data

Kami akan menggunakan data berikut untuk contoh kami:

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;

Hasil:

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

Opsi 1:Bandingkan dengan [:alnum:]

Kita dapat menggunakan REGEXP_LIKE() Oracle berfungsi untuk membandingkan nilai dengan ekspresi reguler.

Kemampuan ekspresi reguler Oracle mencakup dukungan untuk kelas karakter POSIX. Oleh karena itu, kita dapat menggunakan [:alnum:] Kelas karakter POSIX dalam ekspresi reguler kami untuk menemukan baris yang berisi karakter alfanumerik.

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

Hasil:

Music
Café
007
é
É
ø

Itu hanya mengembalikan baris yang tidak berisi apa pun selain karakter alfanumerik. Jika baris berisi karakter alfanumerik dan non-alfanumerik, baris tidak akan dikembalikan.

Perhatikan bahwa karakter spasi dianggap non-alfanumerik, jadi jika kita ingin memasukkan spasi, kita bisa melakukan ini:

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

Hasil:

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

Untuk mengembalikan semua baris yang berisi karakter alfanumerik (meskipun baris juga berisi karakter non-alfanumerik), kita dapat melakukan ini:

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

Hasil:

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

Opsi 2:Tentukan Rentang Karakter

Cara lain untuk melakukannya adalah dengan menentukan rentang karakter dalam ekspresi reguler Anda.

Contoh:

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

Hasil:

Music
007

Anda akan melihat bahwa ini mengembalikan lebih sedikit baris dibandingkan dengan contoh pertama kami. Ini karena saya tidak menyertakan é , É , atau ø karakter dalam jangkauan saya, dan setiap baris yang berisi karakter tersebut dikecualikan dari output.

Oleh karena itu, Anda harus berhati-hati saat menggunakan metode ini, jika Anda tidak sengaja mengecualikan karakter yang harus Anda sertakan.

Ini dia lagi dengan rentang yang menyertakan karakter tersebut:

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

Hasil:

Music
Café
007
é
É
ø

Kami dapat menyertakan spasi seperti ini:

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

Hasil:

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

Dan kita dapat menggunakan yang berikut ini untuk memasukkan semua baris yang berisi karakter dari jangkauan kami (meskipun mereka juga mengandung karakter di luar kisaran ini):

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

Hasil:

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

Atau jika kita tidak ingin menyertakan karakter unicode tersebut, kita dapat menyederhanakannya menjadi ini:

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

Hasil:

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

Ini tidak mengecualikan karakter unicode tersebut dari output jika mereka kebetulan berbagi baris dengan karakter alfanumerik.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. oci_bind_by_name dan to_date PHP/OCI/Oracle

  2. pisahkan string menjadi beberapa baris

  3. bagaimana memulihkan database siaga dari log arsip yang hilang

  4. Nilai tidak ditampilkan dengan nol di depan di Oracle

  5. Memanggil Notasi Untuk Subrutin PL/SQL Di Database Oracle