• 4.5.2017
  • Ing. Jan Zedníček - Data Engineer & Controlling
  • 4

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)

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

Jmenuji se Honza Zedníček a působím jako freelancer. Pracoval jsem dříve také jako BI developer, finanční controller a analytik. Vše pro společnosti z oblasti IT, bankovnictví, consultingu a výroby. Po práci si rád zahraju tenis, volejbal, šachy, zajdu do posilovny a občas neúspěšně odpálím pár balónků v golfu 🏌️

Již cca 10 let zapisuji na tento web různé návody určené zejména odborné veřejnosti, studentům a zájemcům o informace z oblastí Business intelligence, korporátních financí a reportingu.

🔥 Přihlašte se do naší Excel facebook skupiny (2.4k+ členů), kde si pomáháme Excel CZ/SK diskuse »

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

  1. 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. 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. 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 *