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
[email protected]
[email protected]
[email protected]
[email protected]

Oplossing 1:

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

Het resultaat is:

e-mail subtekenreeks
[email protected] jake99@
[email protected] tamarab
[email protected] notine@
[email protected] 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
[email protected] ake99
[email protected] amara
[email protected] otine
[email protected] 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
[email protected] @gmail.com
[email protected] @zoho.com
[email protected] @yahoo.fr
[email protected] @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
[email protected] @gmail
[email protected] @zoho
[email protected] @yahoo
[email protected] @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