Réponses:
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 datetime pour minuit au début du 31 décembre. C'est environ 24 heures avant le dernier moment de l'année. Si vous souhaitez inclure le temps qui pourrait se produire le 31 décembre, comparez-le au premier de l'année suivante, avec une <
comparaison. Ou vous pouvez comparer aux dernières millisecondes de l'année en cours, mais cela laisse toujours un espace 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())
, puis en l'ajoutant à une date de zéro = 1 janvier 1900. Cela peut être changé pour fonctionner pour une date arbitraire en remplaçant la GETDATE()
partie ou une année arbitraire en remplaçant la DATEDIFF(...)
fonction par "Année - 1900."
SELECT
DATEADD(yy, DATEDIFF(yy, 0, '20150301'), 0) AS StartOfYearForMarch2015,
DATEADD(yy, 2015 - 1900, 0) AS StartOfYearFor2015
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.
Vous pouvez obtenir l'année en cours en utilisant la DATEPART
fonction, à partir de la date actuelle obtenue en utilisantgetUTCDate()
SELECT
'01/01/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate())),
'31/12/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate()))
DATETIME
place de la chaîne et évidemment cela pourrait ne pas correspondre à la sortie attendue selon la question.
yyyyMMdd
est sans ambiguïté.
é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 rattacher l'année qu'à ce jour et ce 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, on peut utiliser la CONCAT
fonction. 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))
Une autre façon: (depuis SQL Server 2012)
SELECT
DATEFROMPARTS(YEAR(GETDATE()), 1, 1) FirstDay,
DATEFROMPARTS(YEAR(GETDATE()),12,31) LastDay
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
SELECT DATEADD(DD,-DATEPART(DY,GETDATE())+1,GETDATE())
print Cast('1/1/' + cast(datepart(yyyy, getdate()) as nvarchar(4)) as date)
Il semble que vous soyez intéressé à effectuer une opération sur tout pour une année donnée, si c'est effectivement le cas, je 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 MONTH () . Ils sont également disponibles pour les variantes MySQL / MariaDB et ont été introduits dans SQL Server 2008 (donc pas pour 2000 spécifiques).
select to_date(substr(sysdate,1, 4) || '01/01'), to_date(substr(sysdate,1, 4) || '12/31')
from dual
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.
ANNÉE - obtient la partie année de l'horodatage actuel.
STR , LTRIM - ces deux fonctions sont appliquées afin que nous puissions le convertir en un varchar qui peut être concaténé avec le préfixe souhaité (dans ce cas, il s'agit soit de la première date de l'année, soit de la dernière date de l'année). Pour une raison quelconque, le résultat généré par la fonction YEAR a des espaces de préfixe. Pour les corriger, nous utilisons la fonction LTRIM qui est à gauche.
S'il atteint le 1er janvier, il se peut que ce soit encore la date des dernières années.
select
convert(date, DATEADD(yy, DATEDIFF(yy, 0, DATEadd(day, -1,getdate())), 0), 103 ) AS StartOfYear,
convert(date, DATEADD(yy, DATEDIFF(yy, 0, DATEDIFF(day, -1,getdate()))+1, -1), 103 )AS EndOfYear
Essaye ça:
DATE_FORMAT(NOW(),'01/01/%Y')
DATE_FORMAT(NOW(),'31/12/%Y')
Msg 195, Level 15, State 10, Line 1 'NOW' is not a recognized function name.
--- Démos Lalmuni ---
create table Users
(
userid int,date_of_birth date
)
--- insérer des valeurs ---
insert into Users values(4,'9/10/1991')
select DATEDIFF(year,date_of_birth, getdate()) - (CASE WHEN (DATEADD(year, DATEDIFF(year,date_of_birth, getdate()),date_of_birth)) > getdate() THEN 1 ELSE 0 END) as Years,
MONTH(getdate() - (DATEADD(year, DATEDIFF(year, date_of_birth, getdate()), date_of_birth))) - 1 as Months,
DAY(getdate() - (DATEADD(year, DATEDIFF(year,date_of_birth, getdate()), date_of_birth))) - 1 as Days,
from users