Operace nad datumovými datovými typy jsou hodně frekventované a často potřebujeme pomocí SQL funkcí získat datum nebo nějakou jinou informaci, která z datumu vychází – například číslo týdne, měsíce, roku, posledního dne v měsíci a podobně.

Dnešní datum – GETDATE(), SYSDATETIME()

Dnešní datum a čas k okamžiku realizace dotazu můžeme získat dvěma způsoby. Prvním je SQL funkce GETDATE() a druhým SYSDATETIME(). Obě funkce vrací datum a čas s tím, že funkce sysdatetime je více precizní a vrací výsledek na nanosekundy. Pokud bychom chtěli datum, tak provedeme pomocí funkce CAST nebo CONVERT konverzi na datový typ DATE.

SELECT
   GETDATE()     AS [GETDATE() Datum a čas]
  ,SYSDATETIME() AS [SYSDATETIME() Datum a čas];

getdate-sysdatetime

Číslo týdne a ISO týdne – DATEPART(WEEK, ISO_WEEK)

K získání čísla týdne využijeme SQL funkci DATEPART, která přijímá 2 argumenty – interval a datum 1. Jako interval můžeme použít WEEK (týden), to by však byla ve většině případů chyba. Alespoň pokud chceme dosáhnout stavu podle kalendáře. Číslo týdne má poměrně složitou definici, podobně jako Velikonoce (když pogooglíte, tak určitě něco najdete) 🙂 a WEEK je do značné míry zjednodušené. Vhodnější je použít jako argument ISO_WEEK. Viz příklad, kdy DATEPART(WEEK, 2017-12-31) vrací číslo týdne 53 (dle kalendáře to byl týden č. 52).

SELECT
   DATEPART (WEEK,'2017-12-31')     AS [Week]
  ,DATEPART (ISO_WEEK,'2017-12-31') AS [ISO_Week]

week-iso_week

Číslo roku, měsíce a dne v roce – YEAR, MONTH, DAY, DATEPART

Rok, měsíc a den můžeme získat pomocí vestavěných SQL funkcí YEAR, MONTH a DAY nebo pomocí funkce DATEPART kam dosadíme jako první argument co chceme zobrazit a jako druhý argument je datum (např GETDATE())

SELECT
   DATEPART (YEAR,GETDATE())  AS [DATEPART - Rok]
  ,DATEPART (MONTH,GETDATE()) AS [DATEPART - Mesic]
  ,DATEPART (DAY,GETDATE())   AS [DATEPART - Den]
  ,YEAR(GETDATE())            AS [YEAR - Rok]
  ,MONTH(GETDATE())           AS [MONTH - Mesic]
  ,DAY(GETDATE())             AS [DAY - Den]

year,month,day,datepart

SQL Dotaz na název měsíce a dne v češtině – DATENAME

V SQL Server se na název měsíce a dne dotazujeme pomocí funkce DATENAME(). Ta podobně jako funkce DATEPART přijímá 2 parametry (interval a datum). Názvy vrací defaultně podle toho jak máte nastaven jazyk na SQL Serveru. Pokud bychom chtěli, aby nám SQL Server vrátil název měsíce a dne v češtině, musíme změnit nejprve jazyk podobně jako na příkladu níže.

SELECT
   DATENAME(MONTH, GETDATE())   AS [Název měsíce]
  ,DATENAME(WEEKDAY, GETDATE()) AS [Název dne]

SET LANGUAGE Czech

SELECT
   DATENAME(MONTH, GETDATE())   AS [Název měsíce]
  ,DATENAME(WEEKDAY, GETDATE()) AS [Název dne]

nazev mesice a dne v cestine sql server

První a poslední den v měsíci v T-SQL – EOMONTH, DATEADD

Poslední den v měsíci se dá získat pomocí nativní SQL funkce EOMONTH(). Na první den v měsíci žádná funkce není, ale to nevadí. Není to težké, dá se to udělat elegantně a méně elegantněji. Elegantní způsob spočívá v tom, že si pomocí EOMONTH zobrazíme konec předchozího měsíce a násedně pomocí DATEADD přidáme jeden den. Neelegantně můžeme datum poskládat přes YEAR, MONTH a 01 a výsledek převést na date (poslední sloupec).

SELECT
   EOMONTH(GETDATE())                      AS [Poslední den měsíce]
  ,DATEADD(DAY,1,EOMONTH(GETDATE(),-1))    AS [První den v měsíci - elegantní]
  ,CAST(
      CAST(YEAR(GETDATE()) AS varchar(4)) +'-'
    + CAST(MONTH(GETDATE()) AS varchar(2)) +'-01' AS date)
                                           AS [První den v měsíci - neelegantní, ale funkční]

prvni a posledni den v mesici pres sql

Kdyby vás napadlo ještě něco co by v tomto článku mohlo zaznít, ozvěte se do komentáře

5/5 - (2 votes)

Použité zdroje

  1. Microsoft, DATEPART (Transact-SQL) [on-line]. [cit. 2018-12-11]. Dostupné z WWW: https://docs.microsoft.com/en-us/sql/t-sql/functions/datepart-transact-sql?view=sql-server-2017 

Ing. Jan Zedníček - Data & Finance

Jmenuji se Honza Zedníček a působím jako freelancer. Tuto práci dělám pro různé firmy již přes 10 let. Před tím jsem dlouhou dobu pracoval také jako BI developer, finanční controller, analytik a krátce jako finanční manažer. Vše pro společnosti z oblasti IT, bankovnictví a výroby. Po práci si rád zahraju tenis, volejbal, šachy, zajdu do posilovny a rád ochutnávám dobré rumy. Svoje znalosti a názory se snažím už několik let zapisovat na tento web, aby sloužily i někomu dalšímu - zejména 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 (1.4k+ členů), kde si pomáháme Excel CZ/SK diskuse »
=> Pokud vám článek pomohl, sdílejte ho nebo mě uveďte na vašich webových stránkách jako užitečný zdroj informací.

Leave a Reply

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