sql >> Databáze >  >> RDS >> Database

Jednoduché používání funkcí DATEADD, DATEDIFF a DATEPART T-SQL

Tento článek se zaměřuje na vytvoření základního pochopení toho, jak používat jednu z nejběžnějších funkcí data Transact-SQL:DATEADD, DATEDIFF a DATEPART.

V tomto článku jsem také zdůraznil důležitost správného používání těchto funkcí data při manipulaci s denním datem, po nichž následovalo několik zajímavých scénářů, ve kterých lze tyto funkce data použít způsobem spolupráce k řešení mírně složitých výpočtů data.

Protože se tyto funkce primárně používají při manipulaci s datem, pokusme se nejprve pochopit, co rozumíme pod pojmem manipulace s datem.

Pochopení manipulace s datem

Hodnoty data a času je často nutné upravit podle požadavků a metoda úpravy nebo manipulace nebo řízení výpočtů data a času je známá jako manipulace data.

Také odkazujeme na tuto situaci (manipulaci s datem), když je hodnota data načtena z databáze a poté upravena, než se znovu uloží.

Scénář objednávky zákazníka

Zajímavým příkladem manipulace s datem je objednávka zákazníka scénář, kdy objednávka umístil zákazník je zpracován, datum doručení musí být nastaveno 5 dní před datem objednávky , takže to znamená, že vývojář musí použít funkce data T-SQL k manipulaci (úpravě) data objednávky pro výpočet datu doručení .

Vzorový denní přehled prodeje

Poněkud složitým příkladem je situace, kdy firemní uživatel spustí Denní přehled prodeje pokud zobrazuje včerejší výsledky.

Pokud například spustíme Denní přehled prodeje v neděli v 11:00 nám ukáže výsledky vycházející ze soboty, a pokud to poběžíme v sobotu v 17:00, ukáže nám všechny výsledky v pátek, protože aktuální den ještě neskončil a nejnovější celý dostupný den je včera. Takto je navržena většina profesionálních denních zpráv včetně finančních zpráv.

V tomto příkladu aktuální datum je upraveno (upraveno) tak, aby získalo předchozí datum, které obsahuje záznamy o prodeji za celý den.

Implementace příkladů

Mějte prosím na paměti výše uvedené příklady, protože tyto scénáře budeme implementovat, jakmile dobře porozumíme používání některých nejběžnějších funkcí data popsaných v tomto článku.

Porozumění funkcím data

Podívejme se nejprve na některé základní funkce s datem, které nám mohou pomoci splnit požadavky na manipulaci s datem, jako je určení dnů mezi dvěma daty (datum objednávky a datum dodání), získání záznamů o prodeji z minulého týdne na základě aktuálního data nebo výpočet očekávaného data vypršení platnosti na základě datum výroby a tak dále.

Protože neexistují žádná pevná a rychlá pravidla, začneme nejprve prozkoumávat funkci DATEPART.

Použití funkce DATEPART

Jednoduchá definice

Funkce DATEPART se používá k vrácení části daného data v číselné hodnotě.

Část může být den data, měsíc data, rok data atd.

Například můžeme použít funkci DATEPART, abychom získali den daného data a určili, zda byla objednávka zadána v neděli nebo ne.

Dalším příkladem je získání měsíce daného data, které má být předáno jiné funkci data pro další zpracování.

Definice společnosti Microsoft

Tato funkce vrací celé číslo představující zadanou datepart zadaného data .

Kompatibilita

Podle dokumentace společnosti Microsoft je tato funkce kompatibilní s následujícími verzemi serveru SQL:

  1. SQL Server 2008 plus
  2. Azure SQL Database
  3. Azure SQL Data Warehouse
  4. Paralelní datový sklad

Syntaxe

DATEPART (datepart , date)

Příklad 1:Získání části data roku

Definujme také určité datum (OrderDate ), abyste získali požadovanou část (den, měsíc, rok) pomocí funkce DATEPART.

Chcete-li získat rok data objednávky, jednoduše předáme ROK následuje Datum objednávky (@OrderDate) v DATEPART fungovat následovně:

-- Definujte datum objednávkyDECLARE @OrderDate DATETIME2='2017-01-11'-- Získání roku data objednávkyVYBERTE DATEPART(YEAR,@OrderDate) jako Year_OrderDate

Příklad 2:Získání části měsíce

Pokud nás zajímá měsíc data, pak Měsíc je třeba předat do DATEPART fungovat následovně:

-- Definujte datum objednávkyDECLARE @OrderDate DATETIME2='2017-01-11'-- Získání měsíce data objednávkyVYBERTE DATEPART(MONTH,@OrderDate) jako Month_OrderDate

Příklad 3:Získání části dne

Chcete-li najít denní část data, jednoduše zadejte DAY do DATEPART fungovat následovně:

-- Definujte datum objednávkyDECLARE @OrderDate DATETIME2='2017-01-11'-- Získání dne data objednávkyVYBERTE DATEPART(DAY,@OrderDate) jako Day_OrderDate

Příklad 4:Získání týdenní části dne

Chcete-li získat část data pro den v týdnu, stačí projít WEEKDAY do DATEPART fungovat následovně:

-- Definujte datum objednávkyDECLARE @OrderDate DATETIME2='2017-01-11'-- Získání dne týdne z data objednávkyVYBERTE DATEPART(WEEKDAY,@OrderDate) jako WeekDay_OrderDate

Dostáváme 4, což je středa počínaje nedělí, což je 1.

Podobně můžeme také získat čtvrtinu, hodinu, minutu, druhou část data.

Přejděme k funkci dalšího data.

Použití funkce DATEADD

Jednoduchá definice

Funkce DATEADD se používá k přidání nebo odečtení data.

Můžeme například zjistit, jaké bude datum za čtyři dny nebo čtyři dny předtím.

To je velmi užitečné ve scénářích, kdy se očekávané datum musí vypočítat na základě daného data, například datum vypršení členství musí být přesně jeden rok od data registrace.

Dalším příkladem je výpočet data ukončení kurzu, které musí být přesně dva měsíce po datu zahájení kurzu.

Definice společnosti Microsoft

Tato funkce přidá zadané číslo hodnotu (jako celé číslo se znaménkem) na zadanou část data vstupního data value a poté vrátí tuto upravenou hodnotu.

Kompatibilita

Podle dokumentace společnosti Microsoft je tato funkce kompatibilní s následujícími verzemi serveru SQL:

  1. SQL Server 2008 plus
  2. Azure SQL Database
  3. Azure SQL Data Warehouse
  4. Paralelní datový sklad

Syntaxe

DATEADD (část data, číslo, datum)

Datepart je jakákoli část data, jako je den, měsíc, rok, den v týdnu, hodina atd.

Číslo je pak číslo části data (den, měsíc, rok atd.), která se má přičíst nebo odečíst

Datum je dané datum, které je třeba přidat nebo odečíst pomocí funkce DATEADD

Příklad 1:Získání data v příštím roce

Definujme také určité datum (Datum registrace), které bude přidáno nebo odečteno pomocí DATEADD funkce na základě požadavků.

Datum příštího roku lze získat přidáním 1 k datové části roku.

Chcete-li získat další rok od data registrace, jednoduše přidáme DatePart Rok následuje 1 následovaná Datum registrace (@RegistrationDate) v DATEADD fungovat následovně:

-- Definujte datum registraceDECLARE @RegDate DATETIME2='2018-07-10'-- Získání dalšího roku z data registraceSELECT DATEADD(YEAR,1,@RegDate) jako NextYear_RegDate

Příklad 2:Získání data dalšího měsíce

Chcete-li získat datum příštího měsíce, projděte MONTH datepart do DATEADD funkce následovaná počtem měsíců, které chceme přidat, následovaným daným datem, což je v našem případě datum registrace (RegDate).

-- Definujte datum registraceDECLARE @RegDate DATETIME2='2018-07-10'SELECT @RegDate AS RegDate -- Zobrazit datum registrace-- Získání dalšího MĚSÍCE od data registraceSELECT DATEADD(MONTH,1,@RegDate) jako NextMonth_RegDate 

Příklad 3:Získání data dalšího dne

Pokud kurz začíná následující (další) den registrace, musíme projít DAY s 1 protože následující den přidá k datu registrace další den, což se prokáže následovně:

-- Definujte datum registraceDECLARE @RegDate DATETIME2='2018-07-10'SELECT @RegDate AS RegDate -- Zobrazit datum registrace-- Získání dalšího DAY z data registraceSELECT DATEADD(DAY,1,@RegDate) jako NextDAY_RegDate 

Příklad 4:Nastavení data denní zprávy o prodeji

Nyní se zaměřme na mírně složitý scénář, který se často používá při vývoji denních finančních zpráv.

Pokud chceme vytvořit denní přehled prodeje, měl by ukazovat včerejší data, protože aktuální den ještě není dokončen a poslední dokončený den je včerejší, jak je uvedeno na začátku tohoto článku.

Nakonec musíme také převést včerejší datum a čas na hodnotu pouze datum, aby přehled snáze pokryl celý den.

Abychom získali včerejší datum na základě dnešního data, musíme k aktuálnímu datu přidat „-1 den“ následovně:

-- Definujte aktuální datumDECLARE @CurrentDate DATETIME2=GETDATE()SELECT @CurrentDate AS CurrentDate -- Zobrazit datum registrace-- Získání včerejšího data a času z aktuálního dataSELECT DATEADD(DAY,-1,@CurrentDate) jako YesterdayDateTime_CurrentDate-- Převod Včera DateTime do Date onlySELECT CAST(DATEADD(DAY,-1,@CurrentDate) AS DATE)as YesterdayDateOnly_CurrentDate

Použití funkce DATEDIFF

Jednoduchá definice

Funkce DATEDIFF se používá k určení rozdílu ve dnech, měsících, letech, hodinách atd. mezi dvěma daty.

Můžeme například zjistit, kolik dní uplynulo mezi dvěma daty.

To je také velmi užitečné ve scénářích, kdy potřebujeme prozkoumat rozdíl mezi očekávaným datem doručení objednávky a skutečným datem doručení objednávky.

Dalším příkladem je sledování času, což znamená pochopit, kolik hodin bylo stráveno na konkrétním projektu od jeho začátku až do současnosti.

Definice společnosti Microsoft

Tato funkce vrací počet (jako hodnotu celého čísla se znaménkem) zadaných hranic části data překročených mezi zadaným počátečním datem a datum ukončení .

Kompatibilita

Podle dokumentace společnosti Microsoft je tato funkce kompatibilní s následujícími verzemi serveru SQL:

  1. SQL Server 2008 plus
  2. Azure SQL Database
  3. Azure SQL Data Warehouse
  4. Paralelní datový sklad

Syntaxe

DATEDIFF ( datepart , startdate , enddate )

Datepart je jakákoli část data, jako je den, měsíc, rok, den v týdnu, hodina atd.

Příklad 1:Pochopení rozdílu ve dnech

Pokusme se pochopit, jak je DATEDIFF funkce funguje.

Pokud se pokusíme zjistit rozdíl ve dnech mezi 1. červencem 2018 a 2. červencem 2018, získáme 1 den, což znamená, že rozdíl odečte datum ukončení od počátečního data:

SELECT DATEDIFF(DAY,'01 JULY 2018','02 JULY 2018') AS Days_Between_Two_Consecutive_DatesSELECT DATEDIFF(DAY,'01 JULY 2018','03 JULY 2018') JAKO Days_01_July_0_0 

Příklad 2:Získání počtu dní mezi objednávkou a doručením

Pojďme definovat dvě různá data, Datum objednávky a Datum doručení který bude použit k určení rozdílu ve dnech, měsících, letech, hodinách atd.

Chcete-li zjistit počet dní mezi datem objednávky a datem doručení, část data DAY se předá do DATEDIFF následuje Datum zahájení (Datum objednávky) a Datum ukončení (Datum doručení) :

-- Definujte datum objednávky a datum doručení objednávkyDECLARE @OrderDate DATETIME2='28. července 2018'DECLARE @DeliveryDate DATETIME2='07. srpna 2018'SELECT @OrderDate JAKO Datum objednávky,@Datum doručení jako Datum doručení-- Zobrazit objednávku a data doručení-- Zjištění rozdílu ve dnech mezi datem objednávky a datem doručení VYBERTE DATEDIFF(DAY,@OrderDate,@DeliveryDate) jako Days_Between_Order_and_Delivery

Příklad 3:Získání hodin projektu (sledování času)

Toto je zajímavý příklad sledování času pomocí funkce DATEDIFF.

Zajímá nás například, kolik celkem dní a dní v hodinách a dnech v minutách jsme strávili na konkrétním projektu, a pak nejprve předáme část data DAY do funkce DATEDIFF, kde počáteční datum je datum, kdy projekt začal, a datum ukončení je dnešní datum, po kterém následuje HOUR a poté MINUTA takto:

-- Definujte datum zahájení projektuDECLARE @ProjectStartDate DATETIME2='10. listopadu 2018'SELECT @ProjectStartDate AS ProjectStartDate-- Zobrazit datum zahájení projektu-- Získání počtu dní strávených na projektu zatímSELECT DATEDIFF(DAY,@ProjectStartDate,GETDATE( )) as Project_Days_So_Far-- Získání počtu hodin strávených na projektu zatímSELECT DATEDIFF(HOUR,@ProjectStartDate,GETDATE()) jako Project_Hours_So_Far-- Získání počtu minut strávených na projektu tak dalekoSELECT DATEDIFF(MINUTE,@ProjectStartDate,GETDATE()) )) jako Project_Minutes_So_Far

Gratulujeme, úspěšně jste se naučili používat funkce T-SQL DATEADD, DATEDIFF a DATEPART.

Co dělat

Nyní, když jste obeznámeni s některými základními datovými funkcemi, vyzkoušejte následující možnosti:

  1. Prostudujte si můj předchozí článek Postupy zpráv o testování jednotek – Jump to Start TDDD Part-4, kde najdete ukázkovou databázi SQLDevBlogReportTDD, a poté vytvořte pohled, abyste zjistili počet měsíců na základě data registrace autora.
  2. li>
  3. Prostudujte si můj předchozí článek Zjednodušení hlavní uložené procedury testování jednotek, která také nazývá proceduru utility, kde můžete vytvořit ukázkovou databázi SQLBookShop a přidat Datum doručení do BookOrder tabulky a poté vytvořte novou uloženou proceduru ProcessOrder který používá DATEADD funkce pro přidání očekávaného doručení pět dní po datu objednávky.
  4. Podívejte se prosím na můj předchozí článek Jump to Start Test-Driven Database Development (TDDD) – Part 3 a zkuste vytvořit denní sestavu pomocí funkce DATEADD T-SQL úpravou dat ve vzorové databázi SQLDevBlogReportTDD tak, aby je dostatek dat k zobrazení v přehledu.

  1. Zobrazení zpráv modálního okna v Oracle Forms pomocí Show_Alert

  2. 3 oblasti, které budou mít prospěch z použití nástroje pro sledování výkonu serveru SQL Server

  3. JSON_QUERY() vs JSON_VALUE() v SQL Server:Jaký je rozdíl?

  4. Web2py – Migrace z SQLite na MySQL