Problema:
Come estrarre una sottostringa da una stringa in PostgreSQL/MySQL
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 protected] |
[email protected] |
[email protected] |
[email protected] |
Soluzione 1:
SELECT email, SUBSTRING(email, 1, 7) AS substring FROM emails;
Un'altra sintassi:
SELECT email, SUBSTRING(email FROM 1 FOR 7) AS substring FROM emails;
Il risultato è:
sottostringa | |
---|---|
[email protected] | jake99@ |
[email protected] | tamara |
[email protected] | nota@ |
[email protected] | Jessica |
Discussione:
Usa SUBSTRING()
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.
SUBSTRING(email, 1, 7)
restituirà le sottostringhe dei valori nella colonna email che iniziano all'inizio delle stringhe (primo carattere) e vanno per sette caratteri. L'altra notazione, SUBSTRING(email FROM 1 FOR 7)
, fa esattamente lo stesso. L'argomento dopo il FROM
è l'indice iniziale e l'argomento dopo FOR
è la lunghezza della sottostringa.
Il terzo argomento di SUBSTRING()
la funzione è facoltativa. Se lo ometti, otterrai la sottostringa che inizia all'indice nel secondo argomento e arriva fino alla fine della stringa. SUBSTRING(email, 1)
restituirà l'intera stringa, così come SUBSTRING(email FROM 1)
.
Esempio 2:
Desideri visualizzare la sottostringa tra gli indici 2 e 6 (inclusi).
Soluzione 2:
SELECT email, SUBSTRING(email, 2, 5) AS substring FROM emails;
Un'altra sintassi:
SELECT email, SUBSTRING(email FROM POSITION('@' IN email)) AS substring FROM emails;
Il risultato è:
sottostringa | |
---|---|
[email protected] | @gmail.com |
[email protected] | @zoho.com |
[email protected] | @yahoo.fr |
[email protected] | @onet.pl |
Discussione:
Usi il SUBSTRING()
funzionano 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 il POSITION(character IN column)
funzione, dove carattere è il carattere specifico in cui desideri iniziare la sottostringa (qui, @
). La colonna dell'argomento è la column
da cui vorresti recuperare la sottostringa; può anche essere una stringa letterale.
Se vuoi che la sottostringa arrivi fino alla fine della stringa originale, il terzo argomento in SUBSTRING()
(o la funzione FOR
argomento) non è necessario. Altrimenti, dovrebbe essere la lunghezza della sottostringa, oppure puoi calcolarla usando il POSITION()
funzione. Potresti anche voler recuperare una sottostringa che non termina alla fine della stringa ma a un carattere specifico, ad esempio, prima di '.'. Ecco un esempio:
SELECT email, SUBSTRING(email, POSITION('@' IN email), POSITION('.' IN email) - POSITION('@' IN email)) AS substring FROM emails;
Un'altra sintassi:
SELECT email, SUBSTRING(email FROM POSITION('@' IN email) FOR POSITION('.' IN email) - POSITION('@' IN email)) AS substring FROM emails;
Il risultato di questa query è:
sottostringa | |
---|---|
[email protected] | @gmail |
[email protected] | @zoho |
[email protected] | @yahoo |
[email protected] | @onet |
La parte POSITION('.' IN email) - POSITION('@' IN email)
calcola semplicemente la lunghezza della sottostringa.