Mysql
 sql >> Database >  >> RDS >> Mysql

Come estrarre una sottostringa da una stringa in PostgreSQL/MySQL

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
[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 è:

email 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 è:

email 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 è:

email 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.