Dnes tu budu psát o 2 chuťovkách, které mohou vývojáře překvapit při psaní Transact-SQL scriptů pro Microsoft SQL Server. Obě by se daly označit oblíbeným tagem “na mém počítači to funguje, tak proč ne na serveru u zákazníka?!”.
První problém je s parsováním data. Pokud píšete SQL scripty, často narazíte na nutnost zadat datum textově. Možná už tušíte, že na každém serveru může být formát jiný. Ty se liší pořadím jednotlivých složek (m = měsíc, y = rok, d = den). V SQL Serveru existují následující: mdy, dmy, ymd, ydm, myd, dym. Formát lze ale snadno nastavit příkazem SET DATEFORMAT formát. Takže pokud chcete používat datum ve formátu ‘2009-05-17’ bylo by dobré před zadáváním zavolat:
-- formát datumů ROK, MĚSÍC, DEN
set dateformat ymd
Jak to tak bývá, tak většinou je zadávání data bez problémů, ale lepší je formát vždy upřesňovat. Více informací na MSDN: http://msdn.microsoft.com/en-us/library/ms189491.aspx
Druhý zádrhel může nastat při zjišťování čísla dne v týdnu funkcí DATEPART(dw, ‘datum’). Ta vrací rozsah mezi 1-7. Pokud nekouknete do dokumentace a pouze si zkusíte, jaké čísla to vrací pro jaký den, můžete si myslet, že čísla jsou pro jednotlivé dny pevně dány. Bohužel ale první den může být kterýkoliv v závislosti na nastavení. Proto je i zde lepší před zjišťováním dne v týdnu použít funkci SET DATEFIRST číslo_dne. Jako parametr předáte číslo dne, který má být označován jako první (1 pro pondělí, 7 pro neděli).
Více informací opět na MSDN: http://msdn.microsoft.com/en-us/library/ms181598.aspx
Tomáš Jecha již několikátým rokem získal ocenění Microsoft MVP. V současné době pracuje ve společnosti AVAST jako architekt a vývojář interních systémů. Působí také jako lektor a konzultant v počítačové škole Gopas. V současné době se zajímá především o SQL Server a technologie nad .NET Frameworkem 4. Společně s Tomášem Hercegem napsal tento web a stará se o jeho administraci.
Jak zjistit formát datumu a času na serveru
Datum: 3.7.2009 15:24
Autor: neregistrovaný (62.1.204.67)
Hodnocení autora: není
Příspěvků: 0
Velmi zajímavý postřeh. Je dobré vědět o rozdílech v reprezentaci časů na různých serverech. Taková věc se pak může těžko ladit. Chtěl jsem se ale zeptat, jestli existuje i možnost jak zjistit aktuální nastavení formátu datumu a času na serveru pro všechny datové typy: date, smalldatetime, datetime, datetime2 a datetimeoffset?
Re: Jak zjistit formát datumu a času na serveru
Datum: 3.7.2009 18:53
Autor: neregistrovaný (62.1.204.67)
Hodnocení autora: není
Příspěvků: 0
Zatím to na nic využívat nepotřebuji. Jen by mě zajímalo jaký formát času SQL server tedy využívá - neboť je evidentně jiný pro různá lokalizace systému. Jestli to jde někde nalézt v dokumentaci či pomocí nějaké funkce.
Například zmiňovaná SET DATEFIRST procedura nastaví první den v týdnu a naopak pro jeho zjištění existuje @@DATEFIRST. Proto by mě zajímalo jestli existuje i nějaká funkce pro zjištění formátu času jako doplněk pro SET DATEFORMAT metodu, osobně jsem v dokumentaci nic nenašel.