遇到个需求,上月同期的日期计算,导致上月同期的数据少计算了1天,(此处的上月同期为 日期的截止日期,例:create_date < 上月同期截止日期),这里也包括了闰年的特殊情况
以下是一些测试用例:

如今天是 2019-10-31 上月同期就是 2019-10-1,
今天是 2019-10-30,上月同期  2019-9-30
今天是2019-3-29,上月同期为 2019-3-1
今天是2019-3-30 上月同期为 2019-3-1
今天是2020-3-29,上月同期为2020-2-29
今天是 2020-3-30 上月同期为 2020-3-1
declare  @start  datetime --开始日期
declare  @end  datetime -- 结束日期
declare  @today  datetime /*今天*/
declare  @tomorrow datetime /*明天*/set @today = GETDATE()
set @tomorrow =dateadd(day,1,@today)
set @start = CONVERT(varchar(7), dateadd(mm,-1,@today) , 120) + '-01' -- 开始默认上月1号
set @end =  CONVERT(varchar(10), dateadd(mm,-1,@today)  , 120) -- 结束默认上月的今天
-- 如果今天是1号,上月开始时间为 上上月1号,结束为上月1号
if DAY(@today)=1 set @start = CONVERT(varchar(7),  dateadd(mm,-2,@today)  , 120)+ '-01'
if DAY(@today)=1 set @end = CONVERT(varchar(7),  dateadd(mm,-1,@today)  , 120)+ '-01'-- 如果今天是月末且月份在(1,3,5,7,10) 或  今天是3月30   或今天是平年的 2月29
-- 这些条件的截止日期为上月今天+1,即本月1号
if (  datediff(month,@today,@tomorrow) = 1 and MONTH(@today) in(1,3,5,7,10)   ) or (  MONTH(@today)=3 and DAY(@today)=30 ) or ( MONTH(@today)=3 and DAY(@today)=29 and YEAR(@today)%4!=0 and YEAR(@today)%400!=0 )set @end = CONVERT(varchar(10),  dateadd(mm,-1,@today)+1  , 120)

SQL Server上月同期 日期的计算相关推荐

  1. 第16/24周 SQL Server 2014中的基数计算

    大家好,欢迎回到性能调优培训.上个星期我们讨论在SQL Server里基数计算过程里的一些问题.今天我们继续详细谈下,SQL Server 2014里引入的新基数计算. 新基数计算 SQL Serve ...

  2. MS SQL Server 2000 按日期自动备份

    MS SQL Server 2000 按日期自动备份 ms sql server 2000 1.管理-作业-步骤-命令 DECLARE @strPath NVARCHAR(200)  set @str ...

  3. Between 的开始日期和结束日期是同一天没有查询结果,附SQL server数据库的日期时间格式转换大全

    Between 的开始日期和结束日期是同一天没有查询结果 原因: 条件和参数不是一个格式)如字段的类型里包含了时间分钟秒,但是给的条件里没有这些,只有时间 between会在日期后面自动追加" ...

  4. sql server中对日期字段值的比较

    本文转自:http://www.cnblogs.com/feison/articles/166981.html sql server中对日期字段的比较方式有多种,介绍几种常用的方式: 用northwi ...

  5. percent sql_使用SQL Server中的PERCENT_RANK函数计算SQL百分位数

    percent sql This article explores the SQL Server PERCENT_RANK analytical function to calculate SQL P ...

  6. Sql Server 字符串、日期函数 收藏

    /**//*************************************************************************** DATEPART 返回代表指定日期的指 ...

  7. Sql Server 字符串、日期函数

    /**//*************************************************************************** DATEPART 返回代表指定日期的指 ...

  8. SQL Server 将JDE日期格式转换成常见日期格式

    SQL Server 将JDE日期格式转换成常见日期格式 JDE日期格式:JDE所有的日期字段在DB存储时用的是Julia date格式,总共6码,第一码代表世纪,二三码代表年份,后三码代表前三码所属 ...

  9. SQL Server里的日期格式化

    1)SQL Server 里实现日期格式化需要到 convert()函数: CONVERT() 函数是把日期转换为新数据类型的通用函数,可以用不同的格式显示日期/时间数据. 语法:CONVERT(da ...

  10. SQL Server中的日期时间类型

    一. 数据类型 SQL Server008在上一个版本的基础上把日期时间类的数据类型增加到了六个.除了SQL Server2005的datetime和smalltime之外,加了date,dateti ...

最新文章

  1. 计算机网络sdn,刘少伟:SDN重新定义网络
  2. nt是linux指令吗,linux shell 指令 诸如-d, -f, -e之类的判断表达式简介
  3. Java编程思想(第4版)读书笔记——01
  4. 耐高温防腐计算机电缆,防腐耐高温计算机屏蔽控制电缆
  5. php和python哪个学起来简单一点-python和php哪个容易学
  6. 从文件管理到获取洞见,AI 正在彻底变革企业内容管理
  7. 菜鸟学前端之初入江湖
  8. L2-006. 树的遍历(不建树)
  9. 钉钉老版本下载3.31_钉钉旧版pc下载-钉钉旧版pc客户端下载-西西软件下载
  10. 阻止函数源码在控制台输出
  11. include 与 Widget
  12. java.exe闪退_java 双击jar包闪退或没反应,使用cmd运行提示没有主清单属性,该如何解决...
  13. 多线程/多进程/异步IO
  14. YYDS!完美抠图王冰冰!字节实习生开发的AI,4K60帧视频实时抠图
  15. Flask-SQLAlchemy的使用(详解)
  16. 计算机系统与配置要求,电脑系统以及Adobe Audition的版本配置要求-喜马拉雅
  17. 关于服务器端和客户端的区别
  18. 工作中使用的sql知识点及查询语法
  19. java初级工作总结_【Java初级程序员工作总结_Java初级程序员个人年终总结】-看准网...
  20. 营销活动该怎么来评估?赶快来学一下

热门文章

  1. 电脑数据丢失没有备份怎么找回?
  2. (详细)华为荣耀3C H30-TL00的Usb调试模式在哪里开启的步骤
  3. 图中PNP型三极管发射极和基极为什么要加个100K(R21)的电阻?
  4. 如何使用pr制作视频人物运动残影特效
  5. 学计算机每天应该吃什么,一日三餐教电脑族缓解眼痛
  6. 比勤奋更能决定人生的,是复利思维
  7. # netstat -s
  8. js判断对象是否有某个属性
  9. java判断list中是否包含某个值_java判断list是否包含某个值
  10. app上架需要哪些资料