TSQL není jazykem, který byl primárně navržen pro nějaká velká kouzla s textovými řetězci a manipulaci s nimi. V MS SQL Server tedy nenajdeme příliš vestavěných (build in) funkcí pro práci s textovými řetězci. I přes to se takové funkce najdou a budou se nám určitě hodit, Pojďme se na SQL String Functions – textové funkce podívat. Detailní popis všech funkcí můžeme najít v technické dokumentaci microsoftu 1
Zřetězení textu – CONCAT funkce
Zřetězení je jednou z nejčastějších operací, která se nad stringy provádí. V TSQL máme 2 možnosti, jak zřetězení provést.
- Využít (+) operátor
- Aplikovat CONCAT() funkci
Syntaxe: CONCAT(text 1, text 2, text3)
Doporučuji používat spíše CONCAT, protože skládat stringy přes (+) operátor může být zrádné. Pokud je nějaká část zřetězeného stringu NULL, je výsledkem zřetězení přes (+) operátor vždy NULL. Tuto situaci sice můžem různými způsoby ošetřit, ale proč nevyužít funkci CONCAT, máme to pak bez práce.
Podívejte se na příklad:
DECLARE @Par1 AS VARCHAR(15) = ‘Datový sklad ‘
DECLARE @Par2 AS VARCHAR(10) = ‘je super’
DECLARE @Par3 AS VARCHAR(10) = NULL
SELECT
CONCAT(@Par1,@Par2,@Par3) AS [Výsledek přes funkci CONCAT],
@Par1 + @Par2 + @Par3 AS [Výsledek přes (+) operátor]
Extrakce části řetězce textu – SUBSTRING, CHARINDEX, LEN, LEFT, RIGHT funkce
a) SUBSTRING je ideální kandidát na použití v případě, kdy máme nějaký textový řetězec, který obsahuje patern – pravidlo. Pomocí SUBSTRING funkce můžeme z takového textu extrahovat část, která nás zajímá.
Syntaxe: SUBSTRING(text, počáteční pozice, délka extrakce)
Příklad:
DECLARE @Par1 AS VARCHAR(15) = ‘BLA-Ahoj-BLA’
SELECT SUBSTRING(@Par1,5,4) AS [Výsledek funkce SUBSTRING]
b) CHARINDEX – Často pozici prvního znaku neznáme nebo pouze víme, že se ve hledaném textu nachází znak, od kterého chceme extrahovat určitý počet znaků přičemž se pozice daného znaku může lišit. V tomto případě je na místě kombinovat SUBSTRING s funkcí CHARINDEX, která nám počáteční pozici znaku jako argument SUBSTRINGu najde. Podobným způsobem si můžeme pomocí této nebo jiných SQL string functions pohrát se substring argumentem na počet extrahovaných znaků.
Syntaxe: CHARINDEX(Hledaný text, Text ve kterém hledáme)
c) LEFT, RIGHT – Při jednodušší práci se stringy kdy potřebujeme extrahovat část textu, která začíná prvním znakem zprava nebo zleva můžeme využít tyto funkce. Výraz LEFT(‘xyz’,1) vrátí první znak zleva, tedy x.
Syntaxe: LEFT(Text ze kterého extrahujeme, počet znaků)
Zjištění délky stringu – LEN, DATALENGHT funkce
Někdy se nám může hodit zjištění délky textového řetězce. K tomuto účelu můžeme použít 2 funkce – LEN a DATALENGHT.
a) Funkce LEN -vrací délku vstupního řetězce z hlediska počtu znaků. Například výraz LEN (‘xyz’) by vrátil hodnotu 3. Pokud existují mezery na konci textu, tak je funkce odstraní.
Syntaxe: LEN(Text)
b) Funkce DATALENGTH – vrací délku z hlediska počtu bajtů. To znamená, že pokud je vstupem Unicode řetězec, bude funkce počítat se 2 bajty pro každý znak. Například výraz DATALENGTH (N’xyz’) vrátí 6. Funkce DATALENGHT narozdíl od LEN neodebírá mezery na konci textového řetězce
Syntaxe: DATALENGHT(Text)
Změna textového řetězce – REPLACE, REPLICATE funkce
a) Funkce REPLACE – Pokud potřebujeme změnit předem definovanou část textu, použijeme funkci REPLACE. Tato funkce nahradí vybranou část textu za jiný text. Výraz REPLACE(‘a.b.c’, ‘.’, ‘-‘) vrátí hodnotu ‘a-b-c’
Syntaxe: REPLACE(Text ve kterém nahrazujeme, nahrazovaný znak, nahrazující znak)
b) Funkce REPLICATE – Pomocí REPLICATE můžeme zopakovat určitou část textu požadovaným počtem opakování. Výsledkem výrazu REPLICATE(‘Ahoj ‘, 3) bude text ‘Ahoj Ahoj Ahoj ‘
Syntaxe: REPLICATE(Text, počet opakování)
Formátování textu pomocí SQL string functions – UPPER, LOWER, LTRIM, RTRIM
Tyto funkce asi není potřeba příliš rozpitvávat, mluví samy za sebe
a) UPPER – Vrátí text jako velká písmena
b) LOWER – Vrátí text jako malá písmena
c) LTRIM – odstraní mezer nalevo
d) RTRIM – odstraní mezery napravo
Syntaxe formátovacích funkcí: FORMÁTOVACÍ FUNKCE(Text)
Použité zdroje
- Microsoft, Text functions (reference) [on-line]. [cit. 2017-04-10]. Dostupné z WWW: https://support.microsoft.com/en-us/office/text-functions-reference-cccd86ad-547d-4ea9-a065-7bb697c2a56e
Zdravím. Máte překlep v názvu funkce.
DATALENGHT správně DATALENGTH 🙂