sql >> Databáze >  >> RDS >> Oracle

Jak extrahovat podřetězec z řetězce v Oracle/SQLite

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,
  SUBSTR(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 SUBSTR() 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.

>SUBSTR(email, 1, 7) vrátí podřetězce hodnot ve sloupci e-mailu, které začínají prvním znakem a mají sedm znaků.

Příklad 2:

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

Řešení 2:

SELECT
  email,
  SUBSTR(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 SUBSTR() fungovat stejně jako v předchozím příkladu. 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:

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

Řešení 3:

SELECT
  email,
  SUBSTR(email, INSTR(email, '@'), LENGTH(email) - INSTR(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 SUBSTR() 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 INSTR(column, character) funkce, kde sloupec je doslovný řetězec nebo sloupec, ze kterého chcete podřetězec načíst, a znak je character na kterém chcete začít podřetězec (zde @ ).

Třetí argument SUBSTR() funkce je délka podřetězce. Můžete jej vypočítat pomocí INSTR() a LENGTH() funkcí. Toho dosáhnete odečtením indexu od délky sloupce a přidáním 1:

LENGTH(email) - INSTR(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,
  SUBSTR(email, INSTR(email, '@'), INSTR(email, '.') - INSTR(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 INSTR(email, '.') - INSTR(email, '@') jednoduše vypočítá délku podřetězce.


  1. Funkce DECODE() na serveru SQL Server

  2. Prozkoumejte příčiny a řešení poškození databáze SQL Server

  3. Úvod do zpracování výjimek PL/SQL v databázi Oracle

  4. Jak exportovat data serveru SQL z tabulky do souboru CSV