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)
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
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.
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
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’.”
OU sorry..samozrejme to je muj preklep jak jsem to kopiroval 🙂 SUper ze se podarilo 🙂