1 / 31

Funkce Transact -SQL

Funkce Transact -SQL. V ýběr Filip Čálek. Souhrn. Funkce T-SQL Datum a čas Práce s řetězci Konverze mezi typy. 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 )

marrim
Download Presentation

Funkce Transact -SQL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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: 2010-03-09 16:57:41.9156594 2010-03-09 16:57:41.9156594 +01:00 2010-03-09 15:57:41.9156594 2010-03-09 16:57:41.913 2010-03-09 16:57:41.913 2010-03-09 15: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ř. 2010-03-09, 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 @datum=GETDATE(); • SET LANGUAGE Czech; • SELECT DATENAME(DAY, @datum) AS 'Den', • DATENAME(MONTH, @datum) AS 'Mesic', • DATENAME(YEAR,@datum) AS 'Rok'; ……. • SELECT DATENAME(MONTH, @datum) AS 'Mesic_N’, • DATEPART(MONTH, @datum) 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 'Pocetms'; Rozdil 5 Pocetms 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 datetimeformat.

  10. Funkce – Datum a čas • DECLARE @cisloint; • SET @cislo=0; • WHILE @cislo<12 • BEGIN • SELECT CONVERT(varchar,DATEADD(MONTH,@cislo,'2010-1-31'),104) • SET @cislo=@cislo+1; • END; • 31.01.2010 • 28.02.2010 • 31.03.2010 • 30.04.2010 • … 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 • DECLARE @cisloint; • DECLARE @znak int; • SET @cislo=0; • WHILE @cislo<=DATALENGTH('ahoj') • BEGIN • SET @cislo=@cislo+1; • SET @znak=ASCII(SUBSTRING('ahoj', @cislo,1)); • SELECT @znak, • CHAR(@znak) • 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'; • select SOUNDEX('Ahoj') as 'S1', • SOUNDEX('Ahum') as 'S2', • DIFFERENCE('Ahoj','Ahum') as 'D'; • select SOUNDEX('Ahoj') as 'S1', • SOUNDEX('Server') as 'S2', • DIFFERENCE('Ahoj','Server') as 'D'; S1 S2 D A200 A200 4 S1 S2 D A200 A500 3 S1 S2 D 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 • DECLARE @Z CHAR(15); • SET @Z=' ahoj'; • SELECT @Z AS 'Bezupravy', • LTRIM(@Z) 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! AhojAhojAhojAhojAhoj 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); • DECLARE @auto char(20); • SET @auto='Mam auto'; • SET @auto=STUFF(@auto, 4, 0, ' pekne'); • SELECT @auto as 'Pekne', • STUFF(@auto,4,6,' osklive') • as 'Osklive'; 29.99 30.0 PekneOsklive 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 • DECLARE @cislodecimal(10,3); • SET @cislo= 193.57; • SELECT CAST(@cisloAS int) as 'int', • CAST(@cislo as decimal(10,3)) as 'decimal'; • SELECT CONVERT(int, @cislo) as 'int', • CONVERT(decimal(10,3),@cislo) as 'decimal'; • V tomto případě je funkce shodná. intdecimal 193 193.570 intdecimal 193 193.570

  27. Konverze mezi typy • Podívejme se na rozdíl mezi CAST a CONVERT v případě konverze datetime. • DECLARE @datum datetime; • SET @datum=GETDATE(); • SELECT CAST( @datum as varchar); • SELECTCONVERT(varchar,@datum,109); • Výstup bude již jiný kvůli stylu. • Mar 3 2010 2:40PM • Mar 3 2010 2: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 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: • DECLARE @datum time; • SET @datum=GETDATE(); • SELECTCONVERT(varchar,@datum,100); • SELECTCONVERT(varchar,@datum,108); • Případně pouze datum: • DECLARE @datum datetime; • SET @datum=GETDATE(); • SELECTCONVERT(varchar,@datum,101), • CONVERT(varchar,@datum,102), • CONVERT(varchar,@datum,103), • CONVERT(varchar,@datum,104); 4:34PM 16:34:32 03/10/2010 2010.03.10 10/03/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. • DECLARE @hm varchar(10); • SET @hm='125.25' • SELECT CAST(@hmas int); • DECLARE @hm varchar(10); • SET @hm='125.25' • SELECTCAST(CAST(@hm 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 • http://msdn.microsoft.com Děkuji za pozornost

More Related