Как получить первую и последнюю дату текущего года?
используя 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, который может быть объединен с нашим желаемым префиксом (в этом случае это либо первая дата года, либо последняя дата года). По какой-то причине результат, генерируемый год функция имеет пробелы префиксов. Чтобы исправить их, мы используем LTRIM функция, которая является левой отделкой.
другой способ: (начиная с SQL Server 2012)
SELECT
DATEFROMPARTS(YEAR(GETDATE()), 1, 1) FirstDay,
DATEFROMPARTS(YEAR(GETDATE()),12,31) LastDay
---Lalmuni Демос---
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