sql >> Databáze >  >> RDS >> Mysql

Jak extrahovat podřetězec z řetězce v PostgreSQL/MySQL

Problém:

Jak extrahovat podřetězec z řetězce v PostgreSQL/MySQL

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;

Další syntaxe:

SELECT
  email,
  SUBSTRING(email FROM 1 FOR 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 ve sloupci e-mailu, které začínají na začátku řetězce (první znak) a mají sedm znaků. Druhý zápis, SUBSTRING(email FROM 1 FOR 7) , dělá úplně to samé. Argument za FROM je počáteční index a argument za FOR je délka podřetězce.

Třetí argument funkce SUBSTRING() funkce je volitelná. Pokud jej vynecháte, získáte podřetězec, který začíná na indexu ve druhém argumentu a pokračuje až na konec řetězce. SUBSTRING(email, 1) vrátí celý řetězec, stejně jako SUBSTRING(email FROM 1) .

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;

Další syntaxe:

SELECT
  email,
  SUBSTRING(email FROM POSITION('@' IN email)) 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 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 POSITION(character IN column) funkce, kde znak je konkrétní znak, kterým chcete začínat podřetězec (zde @ ). Sloupec argumentu je column ze kterého chcete získat podřetězec; může to být také doslovný řetězec.

Pokud chcete, aby podřetězec šel až na konec původního řetězce, třetí argument v SUBSTRING() funkce (nebo FOR argument) není potřeba. Jinak by to měla být délka podřetězce, nebo ji můžete vypočítat pomocí POSITION() funkce. 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 '.'. Zde je příklad:

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

Další syntaxe:

SELECT
  email,
  SUBSTRING(email FROM POSITION('@' IN email) FOR POSITION('.' IN email) - POSITION('@' IN 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 POSITION('.' IN email) - POSITION('@' IN email) jednoduše vypočítá délku podřetězce.


  1. 2 Ukázkové databáze pro SQLite

  2. PHP a mySQL:Rok 2038 Chyba:Co to je? jak to vyřešit?

  3. Řešení pro:U tabulky, která má seskupený index columnstore, nejsou podporovány kurzory

  4. Potlačit varovné zprávy pomocí mysql z Terminálu, ale heslo napsané ve skriptu bash