sql >> Databáze >  >> RDS >> Database

Jak extrahovat podřetězec z řetězce v T-SQL

Problém:

Máte sloupec řetězců a rádi byste z nich získali podřetězce.

Příklad 1:

V emails tabulka, je tam sloupec email. Chcete zobrazit prvních sedm znaků každého e-mailu.

Tabulka vypadá takto:

e-mail
[email protected]
[email protected]
[email protected]
[email protected]

Řešení 1:

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

Výsledek je:

e-mail podřetězec
[email protected] jake99@
[email protected] tamarab
[email protected] notine@
[email protected] jessica

Diskuse:

Použijte SUBSTRING() funkce. Prvním argumentem je řetězec nebo název sloupce. Druhý argument je index znaku, na kterém by měl podřetězec začínat. Třetí argument je délka podřetězce.

Dávej si pozor! Na rozdíl od některých jiných programovacích jazyků indexy začínají na 1 , nikoli 0. To znamená, že první znak má index 1, druhý znak má index 2 atd.

SUBSTRING(email, 1, 7) vrátí podřetězce hodnot v email sloupec, který začíná prvním znakem a má sedm znaků.

Příklad 2:

Chcete zobrazit podřetězec mezi indexy 2 a 6 (včetně).

Řešení 2:

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

Výsledek je:

e-mail podřetězec
[email protected] ake99
[email protected] amara
[email protected] otine
[email protected] essic

Diskuse:

Používáte SUBSTRING() fungovat stejně jako v předchozích příkladech. Tentokrát je druhým argumentem funkce 2 , protože chceme začít na indexu 2. Délka podřetězce je 5 (end_index - start_index + 1 ).

Příklad 3:

Chcete zobrazit podřetězec, který začíná na @ znaménko a končí na konci řetězce, ale neznáte přesné indexy ani délky.

Řešení 3:

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

Výsledek je:

e-mail podřetězec
[email protected] @gmail.com
[email protected] @zoho.com
[email protected] @yahoo.fr
[email protected] @onet.pl

Diskuse:

Používáte SUBSTRING() fungovat stejně jako v předchozích příkladech. Tentokrát hledáte konkrétní postavu, jejíž pozice se může lišit řádek od řádku. Chcete-li najít index konkrétního znaku, můžete použít CHARINDEX(character, column) funkce, kde znak je konkrétní znak, kterým chcete začínat podřetězec (zde @ ). Sloupec argumentu je sloupec, ze kterého chcete načíst podřetězec; může to být také doslovný řetězec.

Třetí argument funkce SUBSTRING() funkce je délka podřetězce. Můžete jej vypočítat pomocí CHARINDEX() a LEN() funkcí. To provedete odečtením indexu od délky sloupce a přidáním 1:

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

Můžete také chtít načíst podřetězec, který nekončí na konci řetězce, ale na určitém konkrétním znaku, např. před '. '. Můžete to udělat takto:

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

Výsledek tohoto dotazu je:

e-mail podřetězec
[email protected] @gmail
[email protected] @zoho
[email protected] @yahoo
[email protected] @onet

Část CHARINDEX('.', email) - CHARINDEX('@', email) jednoduše vypočítá délku podřetězce.


  1. 2 způsoby, jak vypsat všechny funkce s hodnotou tabulky v databázi SQL Server

  2. Jak najít minimální hodnoty ve sloupcích

  3. Klouzavý průměr na základě časových razítek v PostgreSQL

  4. Typy kurzoru SQL Server – pouze vpřed statický kurzor | Kurz SQL Server / Kurz TSQL