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

Используя SQL Server 2000, как я могу получить первую и последнюю дату текущего года?

Ожидаемый результат:

01/01/2012 и 31/12/2012

Ответ 1

SELECT
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS StartOfYear,
   DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) AS EndOfYear

Приведенный выше запрос дает значение даты и времени в полночь в начале 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

Ответ 2

Вы можете получить текущий год с помощью функции DATEPART, с текущей даты, полученной с помощью getUTCDate()

SELECT 
    '01/01/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate())), 
    '31/12/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate()))

Ответ 3

просто напишите: -

select convert (date,DATEADD(YEAR,DATEDIFF(YEAR,0,GETDATE()),0))

дата начала года.

select convert (date,DATEADD(YEAR, DATEDIFF(YEAR,0,GETDATE()) + 1, -1))  

Ответ 4

Каждый год имеет 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]

Ответ 5

Для даты начала текущего года:

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

Для даты окончания текущего года:

SELECT DATEADD(DD,-1,DATEADD(YY,DATEDIFF(YY,0,GETDATE())+1,0))

Ответ 6

Чтобы получить первый и последний день года, можно использовать функцию CONCAT. Полученное значение может быть приведено к любому типу.

CONCAT(YEAR(Getdate()),'-01-01') FirstOfYear,
CONCAT(YEAR(GETDATE()),'-12-31') LastOfYear

Ответ 7

Проверьте это:

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

Ответ 8

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

Ответ 9

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

Ответ 10

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

Ответ 11

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

SELECT * FROM 'table' WHERE YEAR(date_column) = '2012';

То же самое касается ДНЯ() и МЕСЯЦА(). Они также доступны для вариантов MySQL/MariaDB и были представлены в SQL Server 2008 (поэтому не для конкретных 2000).

Ответ 12

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

CURRENT_TIMESTAMP - возвращает дату сервера sql во время выполнения запроса.

ГОД - получает часть года с отметкой текущего времени.

STR, LTRIM - эти две функции применяются для того, чтобы мы могли преобразовать это в varchar, который можно объединить с нашим желаемым префиксом (в данном случае это либо первая дата года, либо последняя дата года). По какой-то причине результат, сгенерированный функцией YEAR, имеет префиксные пробелы. Чтобы исправить их, мы используем функцию LTRIM, которая остается триммерной.

Ответ 13

Другой способ: (начиная с SQL Server 2012)

SELECT
    DATEFROMPARTS(YEAR(GETDATE()), 1, 1) FirstDay,
    DATEFROMPARTS(YEAR(GETDATE()),12,31) LastDay

Ответ 14

Здесь довольно простой способ;

SELECT DATEFROMPARTS(YEAR(GETDATE()), 1, 1) AS 'First Day of Current Year';
SELECT DATEFROMPARTS(YEAR(GETDATE()), 12, 31) AS 'End of Current Year';

Это не сексуально, но работает.

Ответ 15

Попробуйте следующее:

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

Ответ 16

Если он достигнет 1 января, возможно, это будет дата последних лет.

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

Ответ 17

--- Демоны Лальмуни ---

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