À 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
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
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()))
é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))
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]
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
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))
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.
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.
select to_date(substr(sysdate,1, 4) || '01/01'), to_date(substr(sysdate,1, 4) || '12/31')
from dual
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).
SELECT DATEADD(DD,-DATEPART(DY,GETDATE())+1,GETDATE())
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
print Cast('1/1/' + cast(datepart(yyyy, getdate()) as nvarchar(4)) as date)
Une autre façon: (depuis SQL Server 2012)
SELECT
DATEFROMPARTS(YEAR(GETDATE()), 1, 1) FirstDay,
DATEFROMPARTS(YEAR(GETDATE()),12,31) LastDay