SQL SERVER中取两年前今天的日期

本文介绍了Sql Server中日期操作的方法,包括获取当前日期、格式化日期、获取年月日等具体元素,以及通过DATEADD函数实现日期的加减运算。此外,还详细列举了DATENAME和DATEPART函数的使用方式,并提供了CONVERT函数用于日期格式转换的例子。

SELECT DATEADD(year, -2, GETDATE())

SELECT DATEADD(yy, -2, GETDATE())

SELECT DATEADD(yyyy, -2, GETDATE())


SqlServer获取当前日期

  1. 获取当前日期

select GETDATE()

格式化:

select CONVERT(varchar,GETDATE(),120) --2017-05-12 16:33:10

  1. 获取当前年 --2017

select DATENAME(YYYY,GETDATE()) --2017

select DATENAME(YEAR,GETDATE()) --2017

select DATEPART(YYYY,GETDATE()) --2017

select DATEPART(YEAR,GETDATE()) --2017

select YEAR(GETDATE())–2017

3.获取当前月 --05或5

select DATENAME(MM,GETDATE()) --05
select DATENAME(MONTH,GETDATE()) --05

select DATEPART(MM,GETDATE()) --5
select DATEPART(MONTH,GETDATE()) --5

select MONTH(GETDATE()) --5

4.获取当前日期 --07或7

select DATENAME(DAY,GETDATE()-5) --7
select DATENAME(D,GETDATE()-5) --7
select DATENAME(DD,GETDATE()-5) --7

select DATEPART(D,GETDATE()-5) --7
select DATEPART(DD,GETDATE()-5) --7
select DATEPART(DAY,GETDATE()-5) --7

select DAY(GETDATE()-5)

  1. 获取当前年月 --201705

select CONVERT(varchar(6),GETDATE(),112) --201705

select CONVERT(varchar(7),GETDATE(),120) --2017-05

6.获取当前年月日 --20170512

select CONVERT(varchar(8),GETDATE(),112) --20170512

select CONVERT(varchar(10),GETDATE(),120) --2017-05-12

7.日期相关函数整理:

GETDATE() :获取当前时间,时间格式默认。

DATENAME:参数为两个,取值区间 interval 和时间 date

                     date 就是时间;

interval 包括 年,月,日,星期等

      e.g:

           YEAR 年;YYYY 年;YY 年;
           QUARTER 季度;QQ 季度 ;Q 季度;
           MONTH 月(05);MM 月(05);M 月(05);
           WEEKDAY 星期几;DW 星期几;W 星期几;
           WEEK 一年的第几周;WK 一年的第几周;WW 一年的第几周;ISOWK 一年的第几周;ISOWW 一年的第几周;ISO_WEEK 一年的第几周;
           DAY 天;DD 天;D 天;
           DAYOFYEAR 一年的第几天;DY 一年的第几天;Y 一年的第几天;
           HOUR 小时;HH 小时;
           MINUTE 分钟;MI 分钟;N 分钟;
           SECOND 秒;SS 秒;S 秒;
           MCS 微秒(略);MICROSECOND 微秒(略);MILLISECOND 毫秒(略);MS 毫秒(略) ; NANOSECOND 十亿分之一秒(略);NS 十亿分之一秒(略);

DATEPART:参数参考DATENAME,不过返回值不一样,DATENAME返回varchar,DATEPART返回int

CONVERT 函数转换格式:主要注意第三个参数 date_style ;格式:select CONVERT(varchar,GETDATE(),0)

    最后的 date_style 可以有 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,100,

                                                      101,102,103,104,105,106,107,108,109,110,111,112,113,114,120,121,126,127,130,131等

           常用的 20,23,24,102,111,112,120等;

           示例:

                    select CONVERT(varchar,GETDATE(),20)  --2017-05-12 17:22:22
                    select CONVERT(varchar,GETDATE(),23)  --2017-05-12
                    select CONVERT(varchar,GETDATE(),24)  --17:23:42
                    select CONVERT(varchar,GETDATE(),102) --2017.05.12
                    select CONVERT(varchar,GETDATE(),111) --2017/05/12
                    select CONVERT(varchar,GETDATE(),112) --20170512

      字符串转日期:select CONVERT(datetime,'2017-05-12',20) 第三个参数参考以上。
<think>好的,用户现在想要在SQL Server中获去年一整年的日期范围。让我先仔细分析一下这个问题。用户可能是在处理报表或者需要筛选出去年的数据,所以他们需要准确的开始和结束日期。首先,我需要确定“去年”的定义是什么,通常是指从去年的1月1日到12月31日,但有时候用户可能指的是从今天往前推一年的时间,比如过去365天,但根据问题描述,“去年一年”应该是指自然年,即完整的去年。 接下来,我需要回忆SQL Server中处理日期的函数。常用的函数有GETDATE()获当前日期DATEADD用于日期加减,DATEFROMPARTS来构造日期。用户可能需要日期值,去年的第一天和最后一天,或者第一天的00:00:00到最后一天的23:59:59.997,这决于具体需求,但通常日期范围是闭区间,包含整个去年。 然后,我需要考虑如何动态生成这些日期,而不是硬编码年份。比如,当前年份减1得到去年的年份,然后构造1月1日和12月31日。这时候可以用YEAR(GETDATE()) -1来获去年的年份,然后用DATEFROMPARTS组合成日期。需要注意的是,DATEFROMPARTS在SQL Server 2012及以上版本可用,如果用户使用的是旧版本,可能需要用其他方法,比如DATEADD和CONVERT。 另外,考虑时间部分的问题。如果用户需要精确到毫秒,可能需要将结束日期设置为去年的最后一天的最后一刻,即23:59:59.997。不过,在SQL Server中,datetime类型的精度是3毫秒,所以使用这样的时间可以确保包含当天的所有时间点。 然后,我需要测试不同的方法,确保在不同年份和日期下都能正确工作。比如,当当前日期是2023年3月15日时,去年的范围应该是2022-01-01到2022-12-31。另一个情况是闰年,比如2020年的去年是2019,但2月天数不同,不过构造1月1日和12月31日不会有问题,因为这个月份的天数固定。 可能还需要考虑用户的SQL Server版本,如果他们使用的是更早的版本,比如2008,可能不支持DATEFROMPARTS,这时候需要替代方法,比如通过字符串拼接然后转换,或者使用DATEADD和DATEDIFF的组合来获年份的第一天和最后一天。 最后,总结出几种不同的方法,并比较它们的优缺点,确保用户可以根据自己的实际情况选择最合适的解决方案。同时,提醒用户注意时间部分和版本兼容性问题,确保查询的准确性和可靠性。</think>在SQL Server中获**去年完整自然年**的日期范围(例如当前为2023年,则去年为2022-01-01至2022-12-31),可通过以下方法实现: --- ### **方法1:精确自然年(推荐)** ```sql DECLARE @LastYearStart DATE = DATEFROMPARTS(YEAR(GETDATE()) - 1, 1, 1); DECLARE @LastYearEnd DATE = DATEFROMPARTS(YEAR(GETDATE()) - 1, 12, 31); SELECT @LastYearStart AS 去年开始日期, @LastYearEnd AS 去年结束日期; ``` #### 特点: - 严格按自然年计(1月1日~12月31日) - 包含完整日期边界(00:00:00 ~ 23:59:59.997) --- ### **方法2:动态计(兼容旧版本)** 若SQL Server版本不支持`DATEFROMPARTS`: ```sq
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值