如何得到当年的第一天和最后一天?

使用 SQLServer2000,如何获得当前年度的第一个和最后一个日期?

预期产出:

01/01/201231/12/2012

465703 次浏览

您可以使用 DATEPART函数从使用 getUTCDate()获得的当前日期得到当前年份

SELECT
'01/01/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate())),
'31/12/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate()))
SELECT
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS StartOfYear,
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) AS EndOfYear

上面的查询给出了12月31日午夜的日期时间值。离一年的最后一刻还差24小时。如果你想包括可能发生在12月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

其他期间

这种方法有两个很好的方面: 性能良好,通过用不同的字符串替换 yy(= year)的两次出现,可以很容易地在其他时期进行更改:

yy, yyyy    year
qq, q       quarter
mm, m       month
wk, ww      week

(小心周: 开始的日期取决于服务器设置。)

技术细节

这是通过使用 DATEDIFF(yy, 0, GETDATE())计算出自1900年以来的年数,然后将其加到日期0 = 1900年1月1日。通过将 GETDATE()部分替换为任意日期,或者将 DATEDIFF(...)函数替换为“ Year-1900”,可以将其更改为任意年份

 SELECT
DATEADD(yy, DATEDIFF(yy, 0, '20150301'), 0) AS StartOfYearForMarch2015,
DATEADD(yy, 2015 - 1900, 0) AS StartOfYearFor2015

看看这个:

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

每年的第一天是第一天,最后一天是31号你要做的就是把年份和那天和那个月联系起来,例如:-

 SELECT '01/01/'+cast(year(getdate()) as varchar(4)) as [First Day],
'12/31/'+cast(year(getdate()) as varchar(4)) as [Last Day]

- 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
select to_date(substr(sysdate,1, 4) || '01/01'), to_date(substr(sysdate,1, 4) || '12/31')
from dual

简单地写:-

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

年度开始日期。

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

试试这个:

DATE_FORMAT(NOW(),'01/01/%Y')
DATE_FORMAT(NOW(),'31/12/%Y')
SELECT DATEADD(DD,-DATEPART(DY,GETDATE())+1,GETDATE())

本年度开始日期:

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

本年度结束日期:

SELECT DATEADD(DD,-1,DATEADD(YY,DATEDIFF(YY,0,GETDATE())+1,0))
print Cast('1/1/' + cast(datepart(yyyy, getdate()) as nvarchar(4)) as date)

看起来像 您对执行给定年份的所有操作很感兴趣,如果确实如此,我建议像下面这样使用 年份()函数:

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

白天月份()也是如此。它们也可用于 MySQL/MariaDB 变体,并且是在 SQLServer2008中引入的(因此不适用于特定的2000)。

在 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 服务器日期。

YEAR -获取当前时间戳的年份部分。

STR LTRIM-应用这两个函数,这样我们就可以将它转换成一个 varchar,它可以与我们想要的前缀连接(在这种情况下,它是一年中的第一个日期或者是一年中的最后一个日期)。不管出于什么原因,由 年份函数生成的结果都有前缀空格。为了修复他们,我们使用的 LTRIM功能,这是左修剪。

要获得一年中的第一天和最后一天,可以使用 CONCAT函数。结果值可以强制转换为任何类型。

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

另一种方法: (自 SQLServer2012以来)

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

这里有一个相当简单的方法;

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

虽然不性感,但很有效。

如果到了一月一号,你可能还是去年的日期。

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

最好的方法是提取当前年份,然后像下面这样使用连接:

SELECT CONCAT(year(now()), '-01-01') as start, -- fist day of current year
CONCAT(year(now()), '-31-12') as end;   -- last day of current year

这就是日期格式的 start : 2020-01-01 and end : 2020-31-12

获得一年中第一次约会和最后一次约会的最好方法是

SELECT CAST(CAST(YEAR(DATEADD(YEAR,-1,GETDATE())) AS VARCHAR) + '-' + '01' + '-' + '01' AS DATE) FIRST_DATE
SELECT CAST(CAST(YEAR(DATEADD(YEAR,-1,GETDATE())) AS VARCHAR) + '-' + '12' + '-' + '31' AS DATE) LAST_DATE