SQL Server 中的时间算法

发表于:2010-7-30 10:57

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编


  --年度计算
  DECLARE @Date  DATETIME
  SET @Date=GETDATE()
  --年初,计算给定日期所在年的第一天
  SELECT DATEADD(YEAR,DATEDIFF(YEAR,0,@Date),0) AS '所在年的第一天'
  --年末,计算给定日期所在年的最后一天
  SELECT DATEADD(YEAR,DATEDIFF(YEAR,-1,@Date),-1) AS '所在年的最后一天'
  --上一年年初,计算给定日期所在年的上一年的第一天
  SELECT DATEADD(YEAR,DATEDIFF(YEAR,-0,@Date)-1,0) AS '所在年的上一年的第一天'
  --上一年年末,计算给定日期所在年的上一年的最后一天
  SELECT DATEADD(YEAR,DATEDIFF(YEAR,0,@Date),-1) AS '所在年的上一年的最后一天'
  --下一年年初,计算给定日期所在年的下一年的第一天
  SELECT DATEADD(YEAR,1+DATEDIFF(YEAR,0,@Date),0) AS '所在年的下一年的第一天'
  --下一年年末,计算给定日期所在年的下一年的最后一天
  SELECT DATEADD(YEAR,1+DATEDIFF(YEAR,-1,@Date),-1) AS '所在年的下一年的最后一天'
  GO

  --季度计算
  DECLARE @Date  DATETIME
  SET @Date=GETDATE()
  --季度初,计算给定日期所在季度的第一天
  SELECT DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date),0) AS '当前季度的第一天'
  --季度末,计算给定日期所在季度的最后一天
  SELECT DATEADD(QUARTER,1+DATEDIFF(QUARTER,0,@Date),-1) AS '当前季度的最后一天'
  --上个季度初
  SELECT DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date)-1,0) AS '当前季度的上个季度初'
  --上个季度末
  SELECT DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date),-1) AS '当前季度的上个季度末'
  --下个季度初
  SELECT DATEADD(QUARTER,1+DATEDIFF(QUARTER,0,@Date),0) AS '当前季度的下个季度初'
  --下个季度末
  SELECT DATEADD(QUARTER,2+DATEDIFF(QUARTER,0,@Date),-1) AS '当前季度的下个季度末'

  --计算给定日期所在月的天数
  DECLARE @Date DATETIME;
  SET @Date = GETDATE()
  --本月度第一天与下月度第一天所差的天数
  SELECT DATEDIFF(DAY,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0),DATEADD(MONTH,1+DATEDIFF(MONTH,0,@Date),0))
  --借助变量简化
  SELECT @Date = DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0) --本月度第一天
  SELECT DATEDIFF(DAY,@Date,DATEADD(MONTH,1,@Date))
  --另一种思路:给定月最后一天的日期,记为本月天数
  SELECT DAY(DATEADD(MONTH,DATEDIFF(MONTH,-1,@Date),-1))
  GO

  --计算给定日期所在季度的天数
  DECLARE @Date DATETIME;
  SET @Date = GETDATE()
  --本季度第一天与下季度第一天所差的天数
  SELECT DATEDIFF(DAY,DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date),0),DATEADD(QUARTER,1+DATEDIFF(QUARTER,0,@Date),0))
  --借助变量简化
  SELECT @Date = DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date),0) --本季度第一天
  SELECT DATEDIFF(DAY,@Date,DATEADD(QUARTER,1,@Date))
  GO

  --计算给定日期所在年度的天数
  DECLARE @Date DATETIME;
  SET @Date = GETDATE()
  --本年度第一天与下年度第一天所差的天数
  SELECT DATEDIFF(DAY,DATEADD(YEAR,DATEDIFF(YEAR,0,@Date),0),DATEADD(YEAR,1+DATEDIFF(YEAR,0,@Date),0))
  --借助变量简化
  SELECT @Date = DATEADD(YEAR,DATEDIFF(YEAR,0,@Date),0) --本年度第一天
  SELECT DATEDIFF(DAY,@Date,DATEADD(YEAR,1,@Date))
  GO

54/5<12345>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号