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:
- SQL Server 2008 plus
- Azure SQL Database
- Azure SQL Data Warehouse
- 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:
- SQL Server 2008 plus
- Azure SQL Database
- Azure SQL Data Warehouse
- 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:
- SQL Server 2008 plus
- Azure SQL Database
- Azure SQL Data Warehouse
- 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:
- 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.
li>- 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.
- 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.