sql >> Database >  >> RDS >> Sqlserver

Hoe krijg ik de eerste en laatste datum van het lopende jaar?

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

De bovenstaande query geeft een datetime-waarde voor middernacht aan het begin van 31 december. Dit is ongeveer 24 uur korter dan het laatste moment van het jaar. Als u de tijd wilt opnemen die op 31 december kan vallen, moet u deze vergelijken met de eerste van het volgende jaar, met een < vergelijking. Of je kunt vergelijken met de laatste paar milliseconden van het huidige jaar, maar dit laat nog steeds een gat achter als je iets anders gebruikt dan DATETIME (zoals 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

Andere perioden

Deze aanpak heeft twee leuke aspecten:goede prestaties en het kan gemakkelijk worden gewijzigd voor andere perioden door beide exemplaren van yy te vervangen. (=jaar) met een andere tekenreeks:

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

(Let op voor weken:de startdag is afhankelijk van de serverinstellingen.)

Technische details

Dit werkt door het aantal jaren sinds 1900 te berekenen met DATEDIFF(yy, 0, GETDATE()) en dat vervolgens toe te voegen aan een datum van nul =1 jan. 1900. Dit kan worden gewijzigd om voor een willekeurige datum te werken door de GETDATE() te vervangen gedeelte of een willekeurig jaartal door de DATEDIFF(...) . te vervangen functie met "Jaar - 1900."

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


  1. Hoe vastgoedbeheerders de efficiëntie kunnen verbeteren met een database

  2. Oracle 12c GEDENTIFICEERD DOOR WAARDEN

  3. Waarom de INCLUDE-clausule gebruiken bij het maken van een index?

  4. WAARDEN Verklaring in MySQL