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

Come estrarre una sottostringa da una stringa in T-SQL

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,
  SUBSTRING(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 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 email colonna che inizia con il primo carattere e arriva a sette caratteri.

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;

Il risultato è:

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

Discussione:

Usi il SUBSTRING() funzionano esattamente come negli esempi precedenti. 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 con @ segno e termina alla fine della stringa, ma non conosci gli indici esatti o le lunghezze.

Soluzione 3:

SELECT
  email,
  SUBSTRING(email, CHARINDEX('@', email), LEN(email) - CHARINDEX('@', 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 SUBSTRING() 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 il CHARINDEX(character, column) funzione dove carattere è il carattere specifico in cui desideri iniziare la sottostringa (qui, @ ). La colonna dell'argomento è la colonna da cui desideri recuperare la sottostringa; può anche essere una stringa letterale.

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

LEN(email) - CHARINDEX('@', 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,
  SUBSTRING(email, CHARINDEX('@', email), CHARINDEX('.', email) - CHARINDEX('@', 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 CHARINDEX('.', email) - CHARINDEX('@', email) calcola semplicemente la lunghezza della sottostringa.