Sql 如何获取当前年度的第一个和最后一个日期?

Sql 如何获取当前年度的第一个和最后一个日期?,sql,sql-server,sql-server-2000,Sql,Sql Server,Sql Server 2000,使用SQL Server 2000,如何获取当前年份的第一个和最后一个日期 预期产出: 01/01/2012和31/12/2012您可以使用DATEPART函数从使用getUTCDate()获取的当前日期获取当前年份 上面的查询给出了12月31日午夜的datetime值。现在距离一年中的最后时刻还差24小时。如果您想包括12月31日可能发生的时间,那么您应该与下一年的第一个时间进行比较,使用查看此时间: select convert(varchar(12),(DateAdd(month,(Mon

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

预期产出:


01/01/2012
31/12/2012

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

上面的查询给出了12月31日午夜的datetime值。现在距离一年中的最后时刻还差24小时。如果您想包括12月31日可能发生的时间,那么您应该与下一年的第一个时间进行比较,使用
查看此时间:

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

每年的第一个日期为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 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,-1,DATEADD(YY,DATEDIFF(YY,0,GETDATE())+1,0))
本年度结束日期:

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

看起来您对在给定年份内执行任何操作都感兴趣,如果确实如此,我建议您使用以下功能:

SELECT * FROM `table` WHERE YEAR(date_column) = '2012';
这同样适用于和。它们也可用于MySQL/MariaDB变体,并在SQL Server 2008中引入(因此不适用于特定的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)))
当前\u时间戳-返回执行查询时的sql server日期

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


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

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

CONCAT(YEAR(Getdate()),'-01-01') FirstOfYear,
CONCAT(YEAR(GETDATE()),'-12-31') LastOfYear
另一种方式:(自SQL Server 2012起)


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

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

它不性感,但很管用

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

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

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

这将为您提供日期格式的:
开始日期:2020-01-01和结束日期:2020-31-12

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

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


这将输出字符串,而不是日期。如果这是您真正需要的,是的,但是如果您可以使用其中任何一个,请将日期保留为日期,而不要将其用作字符串。我不同意,OP没有指定,sql server中的数据表单集可能会返回类似“2012-01-01 12:13:14”的内容,而不是“01/01/2012”@RandyMorris,同意,OP询问他是否可以获得
DATETIME
,而不是字符串,很明显,这可能与问题中的预期输出不匹配。为什么要使用不明确的日期格式(并且答案中的字符串与评论中的格式不匹配)
yyyyMMdd
是明确的。@Damien\u不信者,响应中的查询是根据问题匹配预期输出。关于DATETIME的注释是对OP关于获取日期而不是字符串的注释的响应。答案并不反映此讨论。Microsoft SQL Server
Msg 195,15级,状态10,第1行“NOW”不是可识别的函数名。
此答案使用MySQL函数(并将日期转换为字符串,这是我最讨厌的问题之一)。您应该解释您的代码。代码转储经常被否决,可能会被删除。年份对我不起作用,但日期(部分工程开始日期):=CONCAT(部分日期('Y',开始日期)::int::text,'-01-01')::日期;这不一定是真的,因为有很多。有人能举个例子说明什么时候这不起作用吗?@slayernoah根据服务器的本地化设置,我认为这有时会产生错误。根据区域设置,在SQL server上使用这可能不安全。一个安全的版本是对日期使用ISO格式,不管设置如何,这些日期总是能够正确识别。日期的格式为yyyy-MM-dd。除此之外,上面返回的是字符串,而不是实际日期。执行此类操作的最简单方法是datefromparts(year(getdate()),1,1)和datefromparts(year(getdate()),12,31)。这是用于PL-SQL的,post说是SQL Server 2000,所以必须使用T-SQL。To_Date和Sysdate在t-SQLOnly中不存在,只能从Sql Server 2012开始使用。这是最简单、最有效的方法。最明显的是。请对您的答案提供解释,而不仅仅是代码。我添加了一个简短但简洁的描述!
print Cast('1/1/' + cast(datepart(yyyy, getdate()) as nvarchar(4)) as date)
SELECT * FROM `table` WHERE YEAR(date_column) = '2012';
--beginning of year
select '01/01/' + LTRIM(STR(YEAR(CURRENT_TIMESTAMP)))

--end of year
select '12/31/' + LTRIM(STR(YEAR(CURRENT_TIMESTAMP)))
CONCAT(YEAR(Getdate()),'-01-01') FirstOfYear,
CONCAT(YEAR(GETDATE()),'-12-31') LastOfYear
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
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