[ SQL Server ] 计算N个月前,N个月后的方法

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,独享型 2核4GB
简介: #1. 计算N个月前的日期#2. 计算N个月后的日期#3. 月末最后一天的情况(计算从日数多的月到日数较少的月)#4. 月末最后一天的情况(计算从日数少的月到日数较多的月)

#1. 计算N个月前的日期

#2. 计算N个月后的日期

#3. 月末最后一天的情况(计算从日数多的月到日数较少的月)

#4. 月末最后一天的情况(计算从日数少的月到日数较多的月)

1|计算N个月前的日期

如果要计算N个月前的日期。使用DATEADD函数,并且第二个参数N要指定为负数。

--指定N为负数
DATEADD(month, N, 日付)

image.gif

例如,计算2015年10月15日的前11个月的日期,SQL 如下:

--以下会全返回 2014-11-15 00:00:00.000
SELECT 
  DATEADD(month, -11, '20151015'),
  DATEADD(month, -11, '2015/10/15'),
  DATEADD(month, -11, '2015-10-15')

image.gif

2|计算N个月后的日期

如果计算N个月后的日期,直接使用DATEADD函数,且第二个参数N指定为正数。

DATEADD(month, N, 日付)

image.gif

例如,计算2015年10月15日的后3个月的日期,SQL如下:

--以下会全返回 2016-01-15 00:00:00.000
SELECT 
  DATEADD(month, 3, '20151015'),
  DATEADD(month, 3, '2015/10/15'),
  DATEADD(month, 3, '2015-10-15')

image.gif

3|月末最后一天的情况(计算从日数多的月到日数较少的月)

在以日数多的月末最后一天开始,计算N个月后(N个月前)的日期,且该日期所在月为日数少的月,返回N个月后(N个月前)月末最后一天。

例如,3月31日的一个月后为4月30日。3月31日的一个月前,返回2月最后一天,且要考虑闰年的情况。

实际执行结果如下:

SELECT 
  --返回 2015-04-30 00:00:00.000
  DATEADD(month,  1, '2015/3/31'),
  --返回 2015-02-28 00:00:00.000
  DATEADD(month, -1, '2015/3/31'),
  --返回 2016-02-29 00:00:00.000
  DATEADD(month, -1, '2016/3/31')

image.gif

4|月末最后一天的情况(计算从日数少的月到日数较多的月)

在以日数少的月末最后一天开始,计算N个月后(N个月前)的日期,且该日期所在月为日数多的月,返回日期不变。

例如,4月30日的一个月后为5月30日,4月30日的前一个月为3月30日。

实际执行结果:

SELECT 
  --返回 2015-05-30 00:00:00.000
  DATEADD(month,  1, '2015/4/30'),
  --返回 2015-03-30 00:00:00.000
  DATEADD(month, -1, '2015/4/30')

image.gif


相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
1月前
|
SQL IDE Java
Java连接SQL Server数据库的详细操作流程
Java连接SQL Server数据库的详细操作流程
|
1天前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
19 13
|
4天前
|
存储 SQL C++
对比 SQL Server中的VARCHAR(max) 与VARCHAR(n) 数据类型
【7月更文挑战7天】SQL Server 中的 VARCHAR(max) vs VARCHAR(n): - VARCHAR(n) 存储最多 n 个字符(1-8000),适合短文本。 - VARCHAR(max) 可存储约 21 亿个字符,适合大量文本。 - VARCHAR(n) 在处理小数据时性能更好,空间固定。 - VARCHAR(max) 对于大文本更合适,但可能影响性能。 - 选择取决于数据长度预期和业务需求。
|
8天前
|
SQL Oracle 关系型数据库
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
36 3
|
14天前
|
SQL 存储 安全
数据库数据恢复—SQL Server数据库出现逻辑错误的数据恢复案例
SQL Server数据库数据恢复环境: 某品牌服务器存储中有两组raid5磁盘阵列。操作系统层面跑着SQL Server数据库,SQL Server数据库存放在D盘分区中。 SQL Server数据库故障: 存放SQL Server数据库的D盘分区容量不足,管理员在E盘中生成了一个.ndf的文件并且将数据库路径指向E盘继续使用。数据库继续运行一段时间后出现故障并报错,连接失效,SqlServer数据库无法附加查询。管理员多次尝试恢复数据库数据但是没有成功。
|
16天前
|
SQL 数据库 Python
【Python】已完美解决:(executemany()方法字符串参数问题)more placeholders in sql than params available
【Python】已完美解决:(executemany()方法字符串参数问题)more placeholders in sql than params available
10 1
|
19天前
|
SQL
自定义SQL,可以利用MyBatisPlus的Wrapper来构建复杂的Where条件,如何自定义SQL呢?利用MyBatisPlus的Wrapper来构建Wh,在mapper方法参数中用Param注
自定义SQL,可以利用MyBatisPlus的Wrapper来构建复杂的Where条件,如何自定义SQL呢?利用MyBatisPlus的Wrapper来构建Wh,在mapper方法参数中用Param注
|
20天前
|
SQL 存储 关系型数据库
关系型数据库SQL Server学习
【7月更文挑战第4天】
26 2
|
24天前
|
SQL 存储 测试技术
|
24天前
|
SQL 机器学习/深度学习 搜索推荐
SQL SERVER 转换失败
【6月更文挑战第25天】