Відповіді:
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
Ось досить простий спосіб;
SELECT DATEFROMPARTS(YEAR(GETDATE()), 1, 1) AS 'First Day of Current Year';
SELECT DATEFROMPARTS(YEAR(GETDATE()), 12, 31) AS 'End of Current Year';
Це не сексуально, але це працює.
Ви можете отримати поточний рік за допомогою DATEPART
функції, починаючи з поточної дати, отриманої за допомогоюgetUTCDate()
SELECT
'01/01/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate())),
'31/12/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate()))
DATETIME
замість рядка і, очевидно, що може не відповідати очікуваному результату відповідно до питання.
yyyyMMdd
є однозначним.
просто напишіть:
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]
Щоб отримати перший і останній день року, можна скористатися CONCAT
функцією. Отримане значення може бути передано будь-якому типу.
CONCAT(YEAR(Getdate()),'-01-01') FirstOfYear,
CONCAT(YEAR(GETDATE()),'-12-31') LastOfYear
Дата початку поточного року:
SELECT DATEADD(DD,-DATEPART(DY,GETDATE())+1,GETDATE())
Для кінцевої дати поточного року:
SELECT DATEADD(DD,-1,DATEADD(YY,DATEDIFF(YY,0,GETDATE())+1,0))
Інший спосіб: (З SQL Server 2012)
SELECT
DATEFROMPARTS(YEAR(GETDATE()), 1, 1) FirstDay,
DATEFROMPARTS(YEAR(GETDATE()),12,31) LastDay
Ознайомтесь із цим:
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)
Схоже, вам цікаво виконувати операцію за весь рік, якщо це дійсно так, я б рекомендував використовувати функцію YEAR () на зразок такої:
SELECT * FROM `table` WHERE YEAR(date_column) = '2012';
Те саме стосується DAY () та MONTH () . Вони також доступні для варіантів MySQL / MariaDB і були представлені в SQL Server 2008 (так, не для конкретних 2000 року).
select to_date(substr(sysdate,1, 4) || '01/01'), to_date(substr(sysdate,1, 4) || '12/31')
from dual
У 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 - ці дві функції застосовані так, що ми можемо перетворити це у варшар, який можна конкретизувати з потрібним префіксом (у цьому випадку це або перша дата року, або остання дата року). З будь-якої причини результат, згенерований функцією YEAR, має пробіли. Для їх виправлення ми використовуємо функцію LTRIM, яка залишається лівою обробкою.
Якщо він досягне 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
Спробуйте це:
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.
--- демонстрації 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