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

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]

CONCAT

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]

SQL 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)

CHARINDEX

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)

5/5 - (6 votes)

Použité zdroje
  1. 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 

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 »

Leave a Reply

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