Database
 sql >> база данни >  >> RDS >> Database

Използване на DATEADD, DATEDIFF и DATEPART T-SQL функции с прости термини

Тази статия се фокусира върху разработването на основно разбиране за това как да използвате една от най-често срещаните функции за дата на Transact-SQL:DATEADD, DATEDIFF и DATEPART.

В тази статия също подчертах важността на правилното използване на тези функции за дата при ежедневни манипулации с дата, последвани от някои интересни сценарии, при които тези функции за дата могат да се използват съвместно за решаване на малко сложни изчисления на дата.

Тъй като тези функции се използват основно при манипулации на дати, нека първо се опитаме да разберем какво имаме предвид под манипулиране на дата.

Разбиране на манипулацията с дата

Стойностите за дата и час често трябва да се променят според изискването, а методът за промяна, обработка или контролиране на изчисленията дата и час е известен като манипулиране на дата.

Ние също така се позоваваме на тази ситуация (манипулация с дата), когато стойността на дата се чете от база данни и след това се променя, преди да бъде съхранена отново.

Сценарий клиент-поръчка

Интересен пример за манипулиране на датата е клиентска поръчка сценарий, когато е позар поставен отклиент се обработва, надата на доставка трябва да бъде зададен 5 дни преди датата на поръчка , така че това означава, че разработчикът трябва да използва функция(и) за дата на T-SQL, за да манипулира (модифицира) датата на поръчка за изчисляване на дата на доставка .

Примерен дневен отчет за продажбите

Малко сложен пример е, когато бизнес потребител изпълнява Ежедневен отчет за продажбите ако показва резултатите от вчера.

Например, ако стартираме Дневния отчет за продажбите в неделя в 11:00, ще ни покаже резултати базирани на събота, а ако го стартираме в събота в 17:00, ще ни покаже всички резултати в петък, защото текущият ден все още не е приключил и най-скорошният пълният наличен ден е вчера. Ето как са предназначени повечето професионални ежедневни отчети, включително финансови отчети.

В този пример текущата дата е манипулиран (променен), за да се получи предишната дата, която съдържа записи за продажби за цял ден.

Прилагане на примерите

Моля, имайте предвид горните примери, тъй като ще приложим тези сценарии, след като разберем добре използването на някои от най-често срещаните функции за дата, описани в тази статия.

Разбиране на функциите за дата

Нека първо разгледаме някои основни функции за дата, които могат да ни помогнат да изпълним изискванията за манипулиране на датата, като например определяне на дни между две дати (дата на поръчката и дата на доставка), получаване на записи за продажби от миналата седмица въз основа на текущата дата или изчисляване на очакваната дата на изтичане въз основа на дата на производство и т.н.

Тъй като няма твърди и бързи правила, първо започваме да изследваме функцията DATEPART.

Използване на функция DATEPART

Проста дефиниция

Функцията DATEPART се използва за връщане на част от дадена дата в числова стойност.

Частта може да бъде ден от датата, месец на датата, година на датата и т.н.

Например, можем да използваме функцията DATEPART, за да получим деня на дадена дата, за да определим дали поръчката е направена в неделя или не.

Друг пример е да накарате месеца на дадена дата да бъде прехвърлен на друга функция за дата за по-нататъшна обработка.

Определение на Microsoft

Тази функция връща цяло число, представляващо посочената част от дата на посочената дата .

Съвместимост

Според документацията на Microsoft тази функция е съвместима със следните версии на SQL Server:

  1. SQL Server 2008 плюс
  2. Azure SQL база данни
  3. Azure SQL Data Warehouse
  4. Паралелно хранилище за данни

Синтаксис

DATEPART (datepart , date)

Пример 1:Получаване на година част от датата

Нека дефинираме и определена дата (OrderDate ), за да получите желаната част (Ден, Месец, Година) с помощта на функцията DATEPART.

За да получим годината на датата на поръчката, ние просто преминаваме ГОДИНА последвано от Дата на поръчката (@OrderDate) в DATEPART функционира, както следва:

-- Определете дата на поръчкаDECLARE @OrderDate DATETIME2='2017-01-11'-- Получаване на година на датата на поръчкатаSELECT DATEPART(YEAR,@OrderDate) като Year_OrderDate

Пример 2:Получаване на част от месеца

Ако се интересуваме да знаем месеца на датата, тогава Месец трябва да се предаде в DATEPART функционира, както следва:

-- Определете дата на поръчкаDECLARE @OrderDate DATETIME2='2017-01-11'-- Получаване на месец на датата на поръчкатаSELECT DATEPART(MONTH,@OrderDate) като Month_OrderDate

Пример 3:Получаване на част от деня

За да намерите дневната част от датата, просто преминете DAY в DATEPART функционира, както следва:

-- Определете дата на поръчкаDECLARE @OrderDate DATETIME2='2017-01-11'-- Получаване на ден на датата на поръчкатаSELECT DATEPART(DAY,@OrderDate) като Day_OrderDate

Пример 4:Получаване на част от деня от седмицата

За да получите частта от деня от седмицата на датата, просто преминете WEEKDAY в DATEPART функционира, както следва:

-- Определете дата на поръчкаDECLARE @OrderDate DATETIME2='2017-01-11'-- Получаване на седмицата Ден на датата на поръчкатаSELECT DATEPART(WEEKDAY,@OrderDate) като WeekDay_OrderDate

Получаваме 4, което е сряда, започвайки от неделя, което е 1.

По същия начин можем да получим и четвърт, час, минута, втора част от датата.

Нека преминем към следващата функция за дата.

Използване на функция DATEADD

Проста дефиниция

Функцията DATEADD се използва за добавяне или изваждане на дата.

Например, можем да разберем каква ще бъде датата след четири дни или четири дни преди това.

Това е много удобно в сценариите, при които очакваната дата трябва да се изчисли въз основа на дадена дата, като датата на изтичане на членството трябва да бъде точно една година от датата на регистрация.

Друг пример е да се изчисли крайната дата на курса, която трябва да бъде точно два месеца след началната дата на курса.

Определение на Microsoft

Тази функция добавя посочен номер стойност (като цяло число със знак) към определена част от дата на въведена дата стойност и след това връща тази променена стойност.

Съвместимост

Според документацията на Microsoft тази функция е съвместима със следните версии на SQL Server:

  1. SQL Server 2008 плюс
  2. Azure SQL база данни
  3. Azure SQL Data Warehouse
  4. Паралелно хранилище за данни

Синтаксис

DATEADD (част от дата, номер, дата)

Datepart е всяка част от датата, като ден, месец, година, делничен ден, час и т.н.

Тогава номерът е номер на частта от датата (ден, месец, година и т.н.), която трябва да се добави или извади

Датата е дадена дата, която трябва да се добави или извади с помощта на функцията DATEADD

Пример 1:Получаване на дата за следващата година

Нека също така дефинираме определена дата (Дата на регистрация), която ще бъде добавена или извадена с помощта на DATEADD функция въз основа на изискванията.

Датата на следващата година може да бъде получена чрез добавяне на 1 към годината дата.

За да получите следващата година от датата на регистрация, просто добавяме DatePart Year следван от 1, последван от Дата на регистрация (@RegistrationDate) в DATEADD функционира, както следва:

-- Определете дата на регистрацияDECLARE @RegDate DATETIME2='2018-07-10'-- Получаване на следващата година от дата на регистрацияSELECT DATEADD(YEAR,1,@RegDate) като NextYear_RegDate

Пример 2:Получаване на дата за следващия месец

За да получите датата за следващия месец, преминете MONTH datepart към DATEADD функция, последвана от броя на месеците, които искаме да добавим, последвана от дадената дата, която е датата на регистрация (RegDate) в нашия случай.

-- Определете дата на регистрацияDECLARE @RegDate DATETIME2='2018-07-10'SELECT @RegDate КАТО RegDate -- Показване на дата на регистрация-- Получаване на следващия МЕСЕЦ от датата на регистрацияSELECT DATEADD(MONTH,1,@RegDate) като NextMonth_RegDa /предварително> 

Пример 3:Получаване на дата за следващия ден

Ако курсът започне на следващия (следващия) ден от регистрацията, трябва да преминем ДЕН с1 тъй като следващият ден добавя още един ден към датата на регистрация, което се демонстрира по следния начин:

-- Определете дата на регистрацияDECLARE @RegDate DATETIME2='2018-07-10'SELECT @RegDate КАТО RegDate -- Показване на дата на регистрация-- Получаване на следващия ДЕН от дата на регистрацияSELECT DATEADD(DAY,1,@RegDate) като NextDAY_RegDate 

Пример 4:Настройване на дата за ежедневен отчет за продажбите

Сега нека се съсредоточим върху малко сложен сценарий, често използван при разработването на ежедневни финансови отчети.

Ако искаме да създадем ежедневен отчет за продажбите, той трябва да показва данните от вчера, тъй като текущият ден все още не е завършен, а последният пълен ден е вчера, както е обсъдено в началото на тази статия.

В крайна сметка също трябва да преобразуваме вчерашната дата и час в стойност само за дата, за да улесним отчета да обхване целия ден.

За да получим вчерашната дата въз основа на днешната, трябва да добавим „-1 ден“ към текущата дата, както следва:

-- Дефиниране на текуща датаDECLARE @CurrentDate DATETIME2=GETDATE()SELECT @CurrentDate КАТО CurrentDate -- Показване на дата на регистрация-- Получаване на вчерашна дата и час от текущата датаSELECT DATEADD(DAY,-1,@CurrentDate) като YesterdayDateTime_CurrentDate-- Вчера DateTime в дата само SELECT CAST(DATEADD(DAY,-1,@CurrentDate) AS DATE)като YesterdayDateOnly_CurrentDate

Използване на функция DATEDIFF

Проста дефиниция

Функцията DATEDIFF се използва за определяне на разликата в дни, месеци, години, часове и т.н. между две дати.

Например, можем да разберем колко дни са минали между две дати.

Това също е много удобно в сценариите, при които трябва да проучим разликата между очакваната дата на доставка на поръчката и действителната дата на доставка на поръчката.

Друг пример е проследяването на времето, което означава да разберете колко часа са били изразходвани за конкретен проект от началото му до момента.

Определение на Microsoft

Тази функция връща броя (като цяло число със знак) на посочените граници на частта от датата, пресечена между посочената начална дата и крайна дата .

Съвместимост

Според документацията на Microsoft тази функция е съвместима със следните версии на SQL Server:

  1. SQL Server 2008 плюс
  2. Azure SQL база данни
  3. Azure SQL Data Warehouse
  4. Паралелно хранилище за данни

Синтаксис

DATEDIFF (част от дата, начална дата, крайна дата)

Datepart е всяка част от датата, като ден, месец, година, делничен ден, час и т.н.

Пример 1:Разбиране на разликата в дните

Нека се опитаме да разберем как DATEDIFF функцията работи.

Ако се опитаме да открием разликата в дните между 1 юли 2018 г. и 02 юли 2018 г., ще получим 1 ден, което означава, че изважда крайната дата от началната дата, за да получи разликата:

ИЗБЕРЕТЕ DATEDIFF(ДЕН,'01 ЮЛИ 2018','02 ЮЛИ 2018') КАТО Дни_Между_Две_Последователни_ДатиИЗБЕРЕТЕ DATEDIFF(ДЕН,'01 ЮЛИ 2018','03 ЮЛИ 2018') КАТО Дни_01_B_Eu_01_B> 

Пример 2:Получаване на дни между поръчка и доставка

Нека дефинираме две различни дати, Дата на поръчка и Дата на доставка който ще се използва за определяне на разликата в дни, месеци, години, часове и т.н.

За да разберете броя на дните между датата на поръчката и датата на доставка, частта от датата DAY се предава в DATEDIFF функция, последвана от Начална дата (OrderDate) и Крайна дата (DeliveryDate) :

-- Определете дата на поръчка и дата на доставка на поръчкаDECLARE @OrderDate DATETIME2='28 юли 2018'DECLARE @DeliveryDate DATETIME2='07 август 2018'SELECT @OrderDate КАТО Дата на поръчка,@DeliveryDate като DeliveryDate-- Показване на поръчката и Получаване на разлика в дни между датата на поръчката и датата на доставкаSELECT DATEDIFF(DAY,@OrderDate,@DeliveryDate) като Days_Between_Order_and_Delivery

Пример 3:Получаване на работно време по проекта (Проследяване на времето)

Това е интересен пример за проследяване на времето с помощта на функция DATEDIFF.

Например, ние се интересуваме да знаем колко общо дни и дни в часове и дни в минути сме прекарали за конкретен проект и след това първо ще прехвърлим частта за дата DAY във функцията DATEDIFF, където началната дата е датата, когато проектът е започнал и крайната дата е днешната дата, последвана от преминаване на HOUR и след това преминаване на MINUTE, както следва:

-- Определете начална дата на проектаDECLARE @ProjectStartDate DATETIME2='10 ноември 2018'SELECT @ProjectStartDate AS ProjectStartDate-- Показване на началната дата на проекта-- Получаване на броя дни, прекарани в проекта досега SELECT DATEDIFF(DAY,@ProjectStartDate,GETDATE( )) като Project_Days_So_Far-- Получаване на броя на часовете, прекарани в проекта досега SELECT DATEDIFF(HOUR,@ProjectStartDate,GETDATE()) като Project_Hours_So_Far-- Получаване на броя на минутите, прекарани в проекта досега,SELECT DATEDIFF(MINUTE,@ProjectStartDate,GETDATE( )) като Project_Minutes_So_Far

Поздравления, успешно се научихте да използвате функциите DATEADD, DATEDIFF и DATEPART T-SQL.

Неща за правене

Сега, когато сте запознати с някои основни функции за дата, моля, предизвикайте себе си, като опитате неща, посочени по-долу:

  1. Моля, направете справка с предишната ми статия Процедури за доклад за тестване на модули – Преминете към стартиране на TDDD Част-4, за да настроите примерна база данни SQLDevBlogReportTDD и след това създайте изглед, за да разберете броя на месеците въз основа на датата на регистрация на автора.
  2. Моля, направете справка с предишната ми статия Опростяване на модулното тестване на основната съхранена процедура, която също извиква процедура на помощна програма, за да създадете примерна база данни на SQLBookShop и да добавите DeliveryDate колона в BookOrder таблица и след това създайте нова съхранена процедура ProcessOrder който използва DATEADD функция за добавяне на очаквана доставка пет дни след датата на поръчката.
  3. Моля, вижте предишната ми статия Преминете към стартиране на разработване на база данни, управлявано от тестове (TDDD) – част 3 и опитайте да създадете ежедневен отчет с помощта на функцията DATEADD T-SQL, като промените данните в примерната база данни SQLDevBlogReportTDD, така че има достатъчно данни, за да бъдат показани в отчета.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Преместване на съществуваща таблица от основна файлова група в друга файлова група

  2. Език за дефиниране на SQL данни

  3. Salesforce SOQL от Apache OpenOffice

  4. Визуализирайте повратната точка с Plan Explorer

  5. Неочаквана фрагментация на клъстериран индекс