Как получить первую и последнюю дату текущего года?
используя SQL Server 2000, как я могу получить первую и последнюю дату текущего года?
Ожидаемый Результат:
01/01/2012
и 31/12/2012
15 ответов:
SELECT DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS StartOfYear, DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) AS EndOfYear
приведенный выше запрос дает значение datetime для полуночи в начале декабря 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
Технические Детали
это работает, выясняя количество лет с 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
вы можете получить текущий год, используя
DATEPART
функция, начиная с текущей даты, полученной с помощьюgetUTCDate()
SELECT '01/01/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate())), '31/12/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate()))
просто написать:-
select convert (date,DATEADD(YEAR,DATEDIFF(YEAR,0,GETDATE()),0))
дата начала года.
select convert (date,DATEADD(YEAR, DATEDIFF(YEAR,0,GETDATE()) + 1, -1))
каждый год имеет 1-й в качестве первой даты и 31 в качестве последней даты, что вам нужно сделать, это только прикрепить год к этому дню и месяцу, например: -
SELECT '01/01/'+cast(year(getdate()) as varchar(4)) as [First Day], '12/31/'+cast(year(getdate()) as varchar(4)) as [Last Day]
для даты начала текущего года:
SELECT DATEADD(DD,-DATEPART(DY,GETDATE())+1,GETDATE())
по дату окончания текущего года:
SELECT DATEADD(DD,-1,DATEADD(YY,DATEDIFF(YY,0,GETDATE())+1,0))
проверьте этот:
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
похоже вы заинтересованы в выполнении операции все за данный год, если это действительно так, я бы рекомендовал использовать год()
в Microsoft SQL Server (T-SQL) это можно сделать следующим образом
--beginning of year select '01/01/' + LTRIM(STR(YEAR(CURRENT_TIMESTAMP))) --end of year select '12/31/' + LTRIM(STR(YEAR(CURRENT_TIMESTAMP)))
ТЕКУЩАЯ_ОТМЕТКА_ВРЕМЕНИ - возвращает дату sql server на момент выполнения запроса.
год - получает годовую часть текущей отметки времени.
STR,LTRIM - эти две функции применяются так, что мы можем преобразовать это в varchar, который может быть объединен с нашим желаемым префиксом (в данном случае это либо первая дата года, либо последняя дата года). По какой-то причине результат генерируется год
другой способ: (начиная с SQL Server 2012)
SELECT DATEFROMPARTS(YEAR(GETDATE()), 1, 1) FirstDay, DATEFROMPARTS(YEAR(GETDATE()),12,31) LastDay
- - - Lalmuni Demos - - -
create table Users ( userid int,date_of_birth date )
---вставить значения---
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