SQL SUBSTRING funkce – Část řetězce

Funkce SUBSTRING slouží v SQL k výběru části textového řetězce v textu. Tato funkce patří do textových funkcí – string functions. Před časem jsem napsal velký přehled T-SQL textových funkcí -najdete ho je zde

Syntaxe SUBSTRING

SELECT SUBSTRING(text, <počáteční pozice znaku textu, který chceme vybrat>, <počet znaků od počátečního znaku>)

Funkce má 3 argumenty:

  • Pole s textem ve kterém provádíme výběr textu
  • Počáteční pozice – číselná pozice znaku, v textu od kterého budeme část textu vybírat
  • Počet znaků od počátečního znaku

Příklad funkce – část řetězce

DECLARE @TEXT AS VARCHAR(100) = '.gerge.OPGKER/Text, který chceme vybrat/ FWG--efwER'
SELECT SUBSTRING(@TEXT,15,25)

SQL SUBSTRING

Tip: Počáteční pozici nemusíme počítat ručně, dá se využít ostatních textových funkcí – CHARINDEX, PATINDEX

Více o funkci na webu Microsoft zde

5/5 - (2 votes)
Rubrika: SQL Funkce

O Ing. Jan Zedníček - Data Engineer & Controlling

Jmenuji se Honza Zedníček a působím jako data engineer freelancer. Během cca 10 let jsem zde shromáždil přes 600 IT case studies, průvodců, návodů a tipů určených zejména odborné veřejnosti, studentům a zájemcům o informace z oblastí Data Engineeringu, korporátních financí a reportingu. Zaměřuji se především na Microsoft technologie (on-prem i cloud) a různé synergické efekty v rámci jejich produktového portfolia pro dataře a finanční profesionály. Věnuji se také dalším platformám a významným hráčům z oblasti open source technologií. 🔥 Pokud vám tento článek pomohl, ocením referenci na vašem webu nebo zmínku v komunitě. A mám pro vás ještě tip: řešíte-li nějaký zapeklitý Excel problém, přihlašte se do naší Excel Facebook skupiny (2.4k+ členů), kde si pomáháme Excel CZ/SK diskuse ».

4 thoughts on “SQL SUBSTRING funkce – Část řetězce

  1. Michal

    Dobrý den, mám tabulku, ve které část řetězce sloupce SDATA obsahuje číslo zakázky. Tabulka obsahuje vždy několik řádků se stejným číslem zakázky. Potřebuji napsat SELECT tak, aby výstupem byl seznam, kde číslo zakázky bude vždy jen jednou. Tzn. GROUP BY dle čísla zakázky. Ale to číslo je SUBSTRING. Něco jako toto:

    SELECT SUBSTRING(sdata,4,9) AS [Zakázka č.]
    FROM [data_a]
    GROUP BY [Zakázka č.]

    Děkuji za radu.

  2. Honza Zedníček Autor

    Dobrý den Michale,

    Nejjednodušeji s k výsledku dostanete přes DISTINCT:

    SELECT DISTINCT SUBSTRING(sdata,4,9) AS [Zakázka č.]
    FROM [data_a]

    JInak váš způsob bude také fungovat a máte to v podstatě dobře..Akorát dejte do GROUP BY substring, který máte v selectu. Můžete připojit i COUNT, abyste vidětl kolikrát se daná zakázka v tanulce vyskytuje.

    SELECT SUBSTRING(sdata,4,9) AS [Zakázka č.]
    FROM [data_a]
    GROUP BY SUBSTRING(sdata,4,9) AS [Zakázka č.]

    SELECT SUBSTRING(sdata,4,9) AS [Zakázka č.], COUNT(*) AS [Počet_zakázek]
    FROM [data_a]
    GROUP BY SUBSTRING(sdata,4,9) AS [Zakázka č.]

    DOufám že pomohlo,
    Honza

    1. Michal

      Dobrý den Honzo,
      super, díky moc! Akorát to jsem musel dát jen GROUP BY SUBSTRING(sap_sdata,4,9). To AS [Zakázka č.] to už nechtělo sežrat. Chyba “Msg 156, Level 15, State 1, Line 46 Incorrect syntax near the keyword ‘AS’.”

Leave a Reply

Your email address will not be published. Required fields are marked *