Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
1
Funkce Transact-SQL Výběr Filip Čálek
2
Souhrn Funkce T-SQL Datum a čas Práce s řetězci Konverze mezi typy
3
Funkce – Datum a čas Funkce pro získání data a času
Tyto funkce můžeme rozdělit na funkce s větší přesností a funkce s menší přesností. F s větší přesností(ns) SYSDATETIME SYSDATETIMEOFFSET SYSUTCDATETIME F s menší přesností(ms) CURRENT_TIMESTAMP GETDATE GETUTCDATE Rozdíly si ukážeme na následujícím příkladu.
4
Funkce – Datum a čas SELECT SYSDATETIME() ,SYSDATETIMEOFFSET() ,SYSUTCDATETIME() ,CURRENT_TIMESTAMP ,GETDATE() ,GETUTCDATE() ; Výstup: :57: :57: :00 :57: :57:41.913 :57:41.913 Z ukázky je patrné, že v prvních třech případech se jedná o funkce s větší přesností. Je nutné dále rozlišit funkce, které vrací čas platný na vašem počítači a nebo GMT.
5
Funkce – Datum a čas Parametry funkcí
První parametr těchto funkcí bývá tzv. datepart: Year, month, day, hour, minute atd. Definujeme jaká hodnota se bude vracet. Další parametry se odvíjí dle funkce. Jeden z dalších parametrů načítá datum a čas ve formátu datetime. Např , nebo 2010/03/09. může i obsahovat proměnnou, případně funkci Getdate().
6
Funkce – Datum a čas DATENAME/DATEPART/DATEDIFF
DATENAME vrací nvarchar hodnotu z konkrétního data/času. Např. název měsíce. DATENAME(datepart,datetime) DATEPART funguje shodně akorát vrací číselnou hodnotu. DATEDIFF vrací číselnou hodnotu a sice rozdíl mezi tzv. startdate a enddate ve tvaru datetime. DATEDIFF(datepart,startdate,enddate)
7
Funkce – Datum a čas Příklady: DECLARE @datum datetime;
SET LANGUAGE Czech; SELECT AS 'Den', AS 'Mesic', AS 'Rok'; ……. SELECT AS 'Mesic_N’, AS 'Mesic_P’; Den Mesic Rok 9 březen 2010 Mesic_N Mesic_P březen 3
8
Funkce – Datum a čas Příklady: SELECT DATEDIFF(YEAR,'2005', '2010’)
as ‚Rozdil'; SELECT DATEDIFF(millisecond, GETDATE(), SYSDATETIME()) as 'Pocet ms'; Rozdil 5 Pocet ms 3
9
Funkce – Datum a čas DATEADD/SET LANGUAGE
DATEADD upraví datum/čas o určitý námi zvolený interval. Např. posune měsíc o jedna,čili z ledna se stane únor. DATEADD(datepart,cislo,datetime) Druhý parametr „cislo“ určuje velikost intervalu. SET LANGUAGE upraví nejen názvy měsíce, ale i datetime format.
10
Funkce – Datum a čas int; BEGIN SELECT SET END; … Z příkladu je patrné, že počet dnů je automaticky upraven, aby odpovídal skutečnosti.
11
Funkce – práce s řetězci
ASCII/CHAR/CHARINDEX/DATALENGTH ASCII převádí char na číselnou ASCII hodnotu. CHAR naopak převádí z ASCII kódu na znak. CHARINDEX vyhledává char nebo podřetězec v řetězci a sice, že nalezne jeho první znak. DATALENGTH vrací hodnotu odpovídající délce řetězce.
12
Funkce – práce s řetězci
NCHAR/UNICODE/SUBSTRING V případě převádění do unicode a zpět použijeme funkce UNICODE/NCHAR SUBSTRING vrací část řetězce. Většinou se používá jako pomocná funkce k jiným funkcím, jako např. ASCII,UNICODE… SUBSTRING(retezec, index, rozsah)
13
Funkce – práce s řetězci
int; int; BEGIN SET @cislo,1)); END; Převedeme v cyklu „ahoj“ do ASCII a pak za pomoci funkce CHAR zase zpět na znaky. 97 a 104 h 111 o 106 j NULL NULL
14
Funkce – práce s řetězci
SELECT SUBSTRING('AHOJ',2,2), SUBSTRING('AHOJ',3,2), SUBSTRING('AHOJ',1,3), SUBSTRING('AHOJ',1,4); Ukázka jak se chová SUBSTRING při změně parametrů. HO OJ AHO AHOJ
15
Funkce – práce s řetězci
DIFFERENCE/SOUNDEX DIFFERENCE porovnává dva řetězce a vrací číselnou hodnotu od 0 do 4. 0 – největší možný rozdíl. 4 – nejmenší nebo žádný rozdíl. Neporovnává přímo řetězce, ale kódy vytvořené pomocí funkce SOUNDEX – kód se skládá ze čtyř znaků. První obsahuje první char řetězce a dále tři číselné znaky. Např. SOUNDEX(‘Ahoj’) vrací kód A200.
16
Funkce – práce s řetězci
select SOUNDEX('Ahoj') as 'S1', SOUNDEX('Ahoj') as 'S2', DIFFERENCE('Ahoj','Ahoj') as 'D'; SOUNDEX('Ahum') as 'S2', DIFFERENCE('Ahoj','Ahum') as 'D'; SOUNDEX('Server') as 'S2', DIFFERENCE('Ahoj','Server') as 'D'; S1 S2 D A200 A200 4 A200 A500 3 A200 S616 0
17
Funkce – práce s řetězci
SOUNDEX – stručné vysvětlení tzv. fonetického algoritmu. Tři číselné znaky ohodnocují souhlásky daného slova následujícím způsobem: b, f, p, v = 1 c, g, j, k, q, s, x, z = 2 d, t = 3 l = 4 m, n = 5 r = 6 Soundex z AHOJ vrací A200, protože: A - je první znak. H - není nijak ohodnoceno O – není souhláska J – ohodnoceno jako 2 Jelikož slovo dál nepokračuje, je kód doplněn nulami.
18
Funkce – práce s řetězci
SOUNDEX – příklady SELECT SOUNDEX('robert') SELECT SOUNDEX('rupert') Vzhledem k tomu, že B a P má stejné ohodnocení, vychází nám v tomto případě stejný kód. R163 V případě dvou nebo více stejně ohodnocených souhlásek po sobě je ohodnocena pouze první z nich. Řetězec GGGG by vrátil G200. Doplněním jiného znaku např.: GGPGG nám vyjde G212. Pokud soundex již ohodnotil tři souhlásky, tak případné další ignoruje.
19
Funkce – práce s řetězci
LOWER/UPPER/LTRIM/RTRIM LOWER velké znaky převede na malé. UPPER naopak převede malé na velké. LTRIM odstraní mezery na začátku řetězce RTRIM odstraní mezery na konci řetězce.
20
Funkce – práce s řetězci
CHAR(15); ahoj'; AS 'Bez upravy', AS 'Po uprave'; SELECT LOWER(SUBSTRING('AHOJ', 1, 4)) AS Lower, UPPER(SUBSTRING('ahoj', 1, 4)) AS Upper; Bez upravy Po uprave ahoj ahoj Lower Upper ahoj AHOJ
21
Funkce – práce s řetězci
REPLACE/REPLICATE/REVERSE REPLACE může změnit námi zvoleny podřetězec za jiný. Můžeme tak ve větě změnit např. jedno slovo. REPLICATE zopakuje řetězec podle zvoleného čísla. REVERSE otočí pořadí znaků v řetězci.
22
Funkce – práce s řetězci
SELECT REPLACE('Uceni je nuda!','nuda','zabava'); SELECT REPLICATE('Ahoj ',5); SELECT REVERSE('Ahoj'), REVERSE('kobylamamalybok') , REVERSE('12345'); Uceni je zabava! Ahoj Ahoj Ahoj Ahoj Ahoj johA kobylamamalybok 54321
23
Funkce – práce s řetězci
STR/STUFF STR zaokrouhlí na jedno či více desetinných míst, případně na celá čísla. STUFF vloží jeden řetězec do druhého na určité místo. Také je možnost vymazat určitý počet znaků a na jejich místo vloží vkládaný řetězec.
24
Funkce – práce s řetězci
SELECT STR(29.994, 5, 2), STR(29.994,5,1); char(20); auto'; SET 4, 0, ' pekne'); as 'Pekne', osklive') as 'Osklive'; 29.99 30.0 Pekne Osklive Mam pekne auto Mam osklive auto
25
Konverze mezi typy CAST a CONVERT
Základní funkce pro převody mezi datovými typy. Tyto funkce jsou funkčností téměř shodné. Liší se způsob zápisu a funkce CONVERT na rozdíl od funkce CAST umožňuje definování stylu. Styl se definuje zejména u funkcí data a času. Konkrétně ovlivňuje formát data/času.
26
Konverze mezi typy V tomto případě je funkce shodná.
decimal(10,3); = ; SELECT AS int) as 'int', CAST as decimal(10,3)) as 'decimal'; SELECT as 'int', as 'decimal'; V tomto případě je funkce shodná. int decimal
27
Konverze mezi typy Podívejme se na rozdíl mezi CAST a CONVERT v případě konverze datetime. datetime; SELECT as varchar); SELECT Výstup bude již jiný kvůli stylu. Mar :40PM Mar :40:14:897PM Jak již bylo řečeno, styl se definuje pouze funkcí CONVERT.
28
Konverze mezi typy Základní styly pro formát data/času
- Styl Standard Výstup 0 / 100 Default mon dd yyyy hh:miAM (or PM) 1 101 U.S. mm/dd/yyyy 2 102 ANSI yy.mm.dd 3 103 British/French dd/mm/yyyy 4 104 German dd.mm.yy 5 105 Italian dd-mm-yy 6 106 dd mon yy 7 107 Mon dd, yy 8 108 hh:mi:ss 9 109 Default + ms mon dd yyyy hh:mi:ss:mmmAM (or PM) Toto je výčet základních typů stylu. Je jich mnohem více, ale většina je již více či méně odvozena z těchto prvních. Pokud styl nevyplníme, automaticky se dosadí základní „100“.
29
Konverze mezi typy Pár ukázek použití stylu. Pokud chceme pouze čas:
time; SELECT SELECT Případně pouze datum: datetime; SELECT 4:34PM 16:34:32 03/10/2010 10/03/2010
30
Konverze mezi typy Možné problémy
Občas konverze není možná z důvodu nevyhovujícího datového typu. varchar(10); SELECT as int); SELECT as decimal(10,5)) as int); V tomto případě konverze nelze provést. Proto je nutné převést varchar nejprve na decimal a teprve pak na int. Výsledek: 125
31
Závěr Použitá literatura Děkuji za pozornost
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.