SQL Datum – Dnešní datum, číslo týdne, měsíce a další skripty

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 (více dokumentace MS). 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

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 – 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

 

_______________________________________________________________________________________________
Intelligent technologies - podniková řešení a školení
SQL Datum – Dnešní datum, číslo týdne, měsíce a další skripty
Hodnocení

Napsat komentář

Vaše emailová adresa nebude zveřejněna.

This site uses Akismet to reduce spam. Learn how your comment data is processed.