Oracle
 sql >> Database >  >> RDS >> Oracle

Come estrarre una sottostringa da una stringa in Oracle/SQLite

Problema:

Hai una colonna di stringhe e vorresti ottenere sottostringhe da esse.

Esempio 1:

Nelle emails tabella, c'è una colonna di posta elettronica. Vorresti visualizzare i primi sette caratteri di ogni email.

La tabella si presenta così:

email
[email protected]
[email protected]
[email protected]
[email protected]

Soluzione 1:

SELECT
  email,
  SUBSTR(email, 1, 7) AS substring
FROM emails;

Il risultato è:

email sottostringa
[email protected] jake99@
[email protected] tamara
[email protected] nota@
[email protected] Jessica

Discussione:

Usa un SUBSTR() funzione. Il primo argomento è la stringa o il nome della colonna. Il secondo argomento è l'indice del carattere in cui deve iniziare la sottostringa. Il terzo argomento è la lunghezza della sottostringa.

Attento! A differenza di altri linguaggi di programmazione, gli indici iniziano da 1 , non 0. Ciò significa che il primo carattere ha l'indice 1, il secondo carattere ha l'indice 2, ecc.

>SUBSTR(email, 1, 7) restituirà le sottostringhe dei valori nella colonna email che iniziano con il primo carattere e vanno per sette caratteri.

Esempio 2:

Desideri visualizzare la sottostringa tra gli indici 2 e 6 (inclusi).

Soluzione 2:

SELECT
  email,
  SUBSTR(email, 2, 5) AS substring
FROM emails;

Il risultato è:

email sottostringa
[email protected] ake99
[email protected] amara
[email protected] otina
[email protected] essico

Discussione:

Usi il SUBSTR() funzionano esattamente come nell'esempio precedente. Questa volta, il secondo argomento della funzione è 2, poiché vogliamo iniziare dall'indice 2. La lunghezza della sottostringa è 5 (end_index - start_index + 1 ).

Esempio 3:

Vorresti visualizzare la sottostringa che inizia al segno @ e termina alla fine della stringa, ma non conosci gli indici o le lunghezze esatti.

Soluzione 3:

SELECT
  email,
  SUBSTR(email, INSTR(email, '@'), LENGTH(email) - INSTR(email, '@') + 1) AS substring
FROM emails;

Il risultato è:

email sottostringa
[email protected] @gmail.com
[email protected] @zoho.com
[email protected] @yahoo.fr
[email protected] @onet.pl

Discussione:

Usi il SUBSTR() funzionano esattamente come negli esempi precedenti. Questa volta, stai cercando un personaggio specifico la cui posizione può variare da una riga all'altra. Per trovare l'indice del carattere specifico, puoi utilizzare INSTR(column, character) funzione, dove colonna è la stringa letterale o la colonna da cui desideri recuperare la sottostringa e carattere è il character in cui vorresti iniziare la sottostringa (qui, @ ).

Il terzo argomento di SUBSTR() funzione è la lunghezza della sottostringa. Puoi calcolarlo usando INSTR() e il LENGTH() funzioni. Puoi farlo sottraendo l'indice dalla lunghezza della colonna e aggiungendo 1:

LENGTH(email) - INSTR(email, '@') + 1

Potresti anche voler recuperare una sottostringa che non termina alla fine della stringa ma a un carattere specifico, ad esempio, prima di '.' Ecco come puoi farlo:

SELECT
  email,
  SUBSTR(email, INSTR(email, '@'), INSTR(email, '.') - INSTR(email, '@')) AS substring
FROM emails;

Il risultato di questa query è:

email sottostringa
[email protected] @gmail
[email protected] @zoho
[email protected] @yahoo
[email protected] @onet

La parte INSTR(email, '.') - INSTR(email, '@') calcola semplicemente la lunghezza della sottostringa.