Как получить первую и последнюю дату текущего года?

используя 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

select to_date(substr(sysdate,1, 4) || '01/01'), to_date(substr(sysdate,1, 4) || '12/31') 
from dual

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

print Cast('1/1/' + cast(datepart(yyyy, getdate()) as nvarchar(4)) as date)

похоже вы заинтересованы в выполнении операции все в течение данного года, если это действительно так, я бы рекомендовал использовать год()


в 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

попробуйте это:

DATE_FORMAT(NOW(),'01/01/%Y')
DATE_FORMAT(NOW(),'31/12/%Y')

---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