如何获得当年的第一个和最后一个日期?

时间:2012-11-18 04:02:08

标签: sql sql-server sql-server-2000

使用SQL Server 2000,如何获取当年的第一个和最后一个日期?

预期产出:

01/01/201231/12/2012

19 个答案:

答案 0 :(得分:212)

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

技术详情

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

DATEDIFF(...)

答案 1 :(得分:11)

您可以使用DATEPART功能获取当前年份,从使用getUTCDate()

获取的当前日期开始
SELECT 
    '01/01/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate())), 
    '31/12/' + CONVERT(VARCHAR(4), DATEPART(yy, getUTCDate()))

答案 2 :(得分:7)

简单地写: -

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

一年的开始日期。

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

答案 3 :(得分:4)

每年都有第一个日期作为第一个日期,31个作为最后一个日期,您只需要将年份附加到该日期和月份,例如: -

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

答案 4 :(得分:2)

这是一种相当简单的方法;

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

这不是性感的,但是很有效。

答案 5 :(得分:2)

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

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

答案 6 :(得分:1)

对于当年的开始日期:

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

对于当年的结束日期:

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

答案 7 :(得分:1)

最好的方法是提取当前年份,然后像这样使用串联:

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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

答案 10 :(得分:0)

看起来你有兴趣在给定年份的所有操作中执行操作,如果确实如此,我建议使用这样的YEAR()函数:

com.google.gms.google-services

DAY()MONTH()也是如此。它们也可用于MySQL / MariaDB变体,并在SQL Server 2008中引入(因此不适用于特定的2000)。

答案 11 :(得分:0)

在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 server日期。

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

STR LTRIM - 应用这两个函数,以便我们可以将其转换为可以与我们所需前缀连接的varchar(在这种情况下,它是第一个年度日期或一年中的最后日期)。无论出于何种原因, YEAR 函数生成的结果都有前缀空格。要修复它们,我们使用左侧修剪的 LTRIM 功能。

答案 12 :(得分:0)

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

答案 13 :(得分:0)

另一种方式:(自SQL Server 2012起)

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

答案 14 :(得分: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

答案 15 :(得分:0)

获得一年中的第一个日期和最后一个日期的最佳方法是

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

答案 16 :(得分:-1)

试试这个:

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

答案 17 :(得分:-1)

如果到达1月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

答案 18 :(得分:-3)

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