sql >> Database >  >> RDS >> Database

Een subtekenreeks extraheren uit een tekenreeks in T-SQL

Probleem:

Je hebt een kolom met tekenreeksen en je wilt er subtekenreeksen van krijgen.

Voorbeeld 1:

In de emails tabel, is er een e-mailkolom. U wilt de eerste zeven tekens van elke e-mail weergeven.

De tabel ziet er als volgt uit:

e-mail
jake99@gmail.com
tamarablack@zoho.com
notine@yahoo.fr
jessica1995@onet.pl

Oplossing 1:

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

Het resultaat is:

e-mail subtekenreeks
jake99@gmail.com jake99@
tamarablack@zoho.com tamarab
notine@yahoo.fr notine@
jessica1995@onet.pl jessica

Discussie:

Gebruik de SUBSTRING() functie. Het eerste argument is de tekenreeks of de kolomnaam. Het tweede argument is de index van het teken waarop de substring moet beginnen. Het derde argument is de lengte van de substring.

Kijk uit! In tegenstelling tot sommige andere programmeertalen, de indexen beginnen bij 1 , niet 0. Dit betekent dat het eerste teken index 1 heeft, het tweede teken index 2, enz.

SUBSTRING(email, 1, 7) retourneert de substrings van de waarden in de email kolom die bij het eerste teken begint en zeven tekens bevat.

Voorbeeld 2:

U wilt de subtekenreeks tussen indexen 2 en 6 (inclusief) weergeven.

Oplossing 2:

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

Het resultaat is:

e-mail subtekenreeks
jake99@gmail.com ake99
tamarablack@zoho.com amara
notine@yahoo.fr otine
jessica1995@onet.pl essic

Discussie:

Je gebruikt de SUBSTRING() functioneren net als in de vorige voorbeelden. Deze keer is het tweede argument van de functie 2 , omdat we bij index 2 willen beginnen. De lengte van de substring is 5 (end_index - start_index + 1 ).

Voorbeeld 3:

U wilt de subtekenreeks weergeven die begint met de @ teken en eindigt aan het einde van de tekenreeks, maar u weet de exacte indexen of lengtes niet.

Oplossing 3:

SELECT
  email,
  SUBSTRING(email, CHARINDEX('@', email), LEN(email) - CHARINDEX('@', email) + 1) AS substring
FROM emails;

Het resultaat is:

e-mail subtekenreeks
jake99@gmail.com @gmail.com
tamarablack@zoho.com @zoho.com
notine@yahoo.fr @yahoo.fr
jessica1995@onet.pl @onet.pl

Discussie:

Je gebruikt de SUBSTRING() functioneren net als in de vorige voorbeelden. Deze keer ben je op zoek naar een specifiek personage waarvan de positie van rij tot rij kan verschillen. Om de index van het specifieke teken te vinden, kunt u de CHARINDEX(character, column) gebruiken functie waarbij teken het specifieke teken is waarmee u de subtekenreeks wilt starten (hier @ ). De argumentkolom is de kolom waaruit u de subtekenreeks wilt ophalen; het kan ook een letterlijke tekenreeks zijn.

Het derde argument van de SUBSTRING() functie is de lengte van de subtekenreeks. Je kunt het berekenen met de CHARINDEX() en de LEN() functies. U doet dit door de index af te trekken van de kolomlengte en vervolgens 1 op te tellen:

LEN(email) - CHARINDEX('@', email) + 1

Mogelijk wilt u ook een subtekenreeks ophalen die niet aan het einde van de tekenreeks eindigt, maar op een specifiek teken, bijvoorbeeld vóór '. '. Hier leest u hoe u dit kunt doen:

SELECT
  email,
  SUBSTRING(email, CHARINDEX('@', email), CHARINDEX('.', email) - CHARINDEX('@', email)) AS substring
FROM emails;

Het resultaat van deze zoekopdracht is:

e-mail subtekenreeks
jake99@gmail.com @gmail
tamarablack@zoho.com @zoho
notine@yahoo.fr @yahoo
jessica1995@onet.pl @onet

Het deel CHARINDEX('.', email) - CHARINDEX('@', email) berekent eenvoudig de lengte van de substring.


  1. Oracle ORA-01008:niet alle variabelen gebonden Fout met parameters

  2. SQL INSERT zonder kolommen op te geven. Wat gebeurt er?

  3. Hoe een externe sleutelbeperking te maken met ON DELETE SET NULL-optie in SQL Server - SQL Server / TSQL-zelfstudie deel 81

  4. SQL Server:dynamisch draaien over 5 kolommen