苏飞论坛

标题: 日期推算处理 [打印本页]

作者: session    时间: 2013-9-1 22:34
标题: 日期推算处理

  1. DECLARE @dt datetime
  2. SET @dt=GETDATE()
  3. DECLARE @number int
  4. SET @number=3
  5. --1.指定日期该年的第一天或最后一天
  6. --A. 年的第一天
  7. SELECT CONVERT(char(5),@dt,120)+'1-1'
  8. --B. 年的最后一天
  9. SELECT CONVERT(char(5),@dt,120)+'12-31'

  10. --2.指定日期所在季度的第一天或最后一天
  11. --A. 季度的第一天
  12. SELECT CONVERT(datetime,
  13. CONVERT(char(8),
  14.   DATEADD(Month,
  15.    DATEPART(Quarter,@dt)*3-Month(@dt)-2,
  16.    @dt),
  17.   120)+'1')
  18. --B. 季度的最后一天(CASE判断法)
  19. SELECT CONVERT(datetime,
  20. CONVERT(char(8),
  21.   DATEADD(Month,
  22.    DATEPART(Quarter,@dt)*3-Month(@dt),
  23.    @dt),
  24.   120)
  25. +CASE WHEN DATEPART(Quarter,@dt) in(1,4)
  26.   THEN '31'ELSE '30' END)
  27. --C. 季度的最后一天(直接推算法)
  28. SELECT DATEADD(Day,-1,
  29. CONVERT(char(8),
  30.   DATEADD(Month,
  31.    1+DATEPART(Quarter,@dt)*3-Month(@dt),
  32.    @dt),
  33.   120)+'1')

  34. --3.指定日期所在月份的第一天或最后一天
  35. --A. 月的第一天
  36. SELECT CONVERT(datetime,CONVERT(char(8),@dt,120)+'1')
  37. --B. 月的最后一天
  38. SELECT DATEADD(Day,-1,CONVERT(char(8),DATEADD(Month,1,@dt),120)+'1')
  39. --C. 月的最后一天(容易使用的错误方法)
  40. SELECT DATEADD(Month,1,DATEADD(Day,-DAY(@dt),@dt))

  41. --4.指定日期所在周的任意一天
  42. SELECT DATEADD(Day,@number-DATEPART(Weekday,@dt),@dt)

  43. --5.指定日期所在周的任意星期几
  44. --A.  星期天做为一周的第1天
  45. SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-1)%7,@dt)
  46. --B.  星期一做为一周的第1天
  47. SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-2)%7-1,@dt)
复制代码

作者: 站长苏飞    时间: 2013-9-2 08:06
我只是路过打酱油的。
作者: happyzp    时间: 2013-12-3 10:50
我只是路过看看的。




欢迎光临 苏飞论坛 (http://www.sufeinet.com/) Powered by Discuz! X3.4