web-dev-qa-db-fra.com

Comment obtenir la première et la dernière date de l'année en cours?

À l'aide de SQL Server 2000, comment puis-je obtenir la première et la dernière date de l'année en cours?

Production attendue:

01/01/2012 et 31/12/2012

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

La requête ci-dessus donne une valeur date/heure pour minuit au début du 31 décembre. Cela correspond à environ 24 heures de moins que le dernier moment de l'année. Si vous souhaitez inclure l'heure pouvant se produire le 31 décembre, vous devez comparer avec le premier de l'année suivante, avec une comparaison <. Vous pouvez également comparer les dernières millisecondes de l'année en cours, mais cela laisse un vide si vous utilisez autre chose que DATETIME (tel que 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

Détails techniques

Cela fonctionne en calculant le nombre d’années depuis 1900 avec DATEDIFF(yy, 0, GETDATE()) et en ajoutant cela à une date égale à zéro = 1 janvier 1900. Ceci peut être modifié pour fonctionner à une date arbitraire en remplaçant la partie GETDATE() ou une année DATEDIFF(...) fonction with "Year - 1900."

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

Vous pouvez obtenir l'année en cours à l'aide de la fonction DATEPART à partir de la date en cours obtenue à l'aide de getUTCDate()

SELECT 
    '01/01/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate())), 
    '31/12/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate()))
10
Vikdor

écrivez simplement: -

select convert (date,DATEADD(YEAR,DATEDIFF(YEAR,0,GETDATE()),0))

date de début de l'année.

select convert (date,DATEADD(YEAR, DATEDIFF(YEAR,0,GETDATE()) + 1, -1))  
6
Pradeep atkari

Chaque année a le 1 er comme première date et le 31 comme dernière date, ce que vous devez faire est de ne joindre que l'année à ce jour et au mois par exemple: -

 SELECT '01/01/'+cast(year(getdate()) as varchar(4)) as [First Day],
 '12/31/'+cast(year(getdate()) as varchar(4)) as [Last Day]
3
Rahul Tripathi

Pour obtenir le premier et le dernier jour de l'année, vous pouvez utiliser la fonction CONCAT. La valeur résultante peut être convertie en n'importe quel type.

CONCAT(YEAR(Getdate()),'-01-01') FirstOfYear,
CONCAT(YEAR(GETDATE()),'-12-31') LastOfYear
1
Gayle

Pour la date de début de l'année en cours:

SELECT DATEADD(DD,-DATEPART(DY,GETDATE())+1,GETDATE())

Pour la date de fin de l'année en cours:

SELECT DATEADD(DD,-1,DATEADD(YY,DATEDIFF(YY,0,GETDATE())+1,0))
1
DHANA LAKSHMI

Voici un moyen assez simple.

SELECT DATEFROMPARTS(YEAR(GETDATE()), 1, 1) AS 'First Day of Current Year';
SELECT DATEFROMPARTS(YEAR(GETDATE()), 12, 31) AS 'End of Current Year';

Ce n'est pas sexy, mais ça marche. 

1
Aubrey Love

Dans Microsoft SQL Server (T-SQL), cela peut être fait comme suit

--beginning of year
select '01/01/' + LTRIM(STR(YEAR(CURRENT_TIMESTAMP)))

--end of year
select '12/31/' + LTRIM(STR(YEAR(CURRENT_TIMESTAMP)))

CURRENT_TIMESTAMP - renvoie la date du serveur SQL au moment de l'exécution de la requête.

YEAR- récupère l'année dans l'horodatage actuel. 

STR,LTRIM- ces deux fonctions sont appliquées afin que nous puissions convertir ceci en un varchar pouvant être concatiné avec notre préfixe souhaité (dans ce cas, il s'agit de la première date de l'année ou la dernière date de l'année). Pour une raison quelconque, le résultat généré par la fonctionYEARa des espaces de préfixe. Pour les corriger, nous utilisons la fonctionLTRIMqui est à gauche trim. 

0
Soundararajan
select to_date(substr(sysdate,1, 4) || '01/01'), to_date(substr(sysdate,1, 4) || '12/31') 
from dual
0
R-Dubz

Il semble que vous vouliez exécuter une opération pour une année donnée. Si tel est bien le cas, je vous recommanderais d'utiliser la fonction YEAR () comme ceci:

SELECT * FROM `table` WHERE YEAR(date_column) = '2012';

Il en va de même pour DAY () et MOIS () . Ils sont également disponibles pour les variantes de MySQL/MariaDB et ont été introduits dans SQL Server 2008 (donc pas pour 2000 spécifique).

0
chjortlund
SELECT DATEADD(DD,-DATEPART(DY,GETDATE())+1,GETDATE())
0
DHANA LAKSHMI

Découvrez celui-ci:

select convert(varchar(12),(DateAdd(month,(Month(getdate())-1) * -1, DateAdd(Day,(Day(getdate())-1) * -1,getdate()))),103) as StartYear,
       convert(varchar(12),DateAdd(month,12 - Month(getdate()), DateAdd(Day,(31 - Day(getdate())),getdate())),103) as EndYear
0
NeverHopeless
print Cast('1/1/' + cast(datepart(yyyy, getdate()) as nvarchar(4)) as date)
0
zadeveloper

Une autre façon: (depuis SQL Server 2012)

SELECT
    DATEFROMPARTS(YEAR(GETDATE()), 1, 1) FirstDay,
    DATEFROMPARTS(YEAR(GETDATE()),12,31) LastDay
0
EstevaoLuis