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

Как да получите първата и последната дата на текущата година?

SELECT
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS StartOfYear,
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) AS EndOfYear

Горната заявка дава стойност за дата и час за полунощ в началото на 31 декември. Това е на около 24 часа от последния момент от годината. Ако искате да включите времето, което може да настъпи на 31 декември, тогава трябва да сравните с първото число на следващата година с < сравнение. Или можете да сравните с последните няколко милисекунди на текущата година, но това все още оставя празнина, ако използвате нещо различно от DATETIME (като DATETIME2):

SELECT
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS StartOfYear,
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) AS LastDayOfYear,
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, 0) AS FirstOfNextYear,
   DATEADD(ms, -3, DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, 0)) AS LastTimeOfYear

Други периоди

Този подход има два хубави аспекта:добра производителност и може лесно да бъде променен за други периоди, като се заменят и двете поява на yy (=година) с различен низ:

yy, yyyy    year
qq, q       quarter
mm, m       month
wk, ww      week 

(Внимавайте със седмиците:началният ден зависи от настройките на сървъра.)

Технически подробности

Това работи, като се изчисли броят на годините от 1900 г. с DATEDIFF(yy, 0, GETDATE()) и след това добавяне към дата от нула =1 януари 1900 г. Това може да се промени, за да работи за произволна дата, като замените GETDATE() част или произволна година, като замените DATEDIFF(...) функция с "Година - 1900."

 SELECT
   DATEADD(yy, DATEDIFF(yy, 0, '20150301'), 0) AS StartOfYearForMarch2015,
   DATEADD(yy, 2015 - 1900, 0) AS StartOfYearFor2015


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Препоръчителни процесори Intel за натоварвания на SQL Server 2014

  2. Ефективно разрешаване на проблема с базата данни на SQL Server, заседнал в подозрителен режим

  3. tempdb Подобрения в SQL Server 2019

  4. Как да коригирате „Отказът ALTER TABLE SWITCH не е успешен“

  5. Какъв е най-добрият начин да тествате програмно връзката със SQL Server?