zoukankan      html  css  js  c++  java
  • TSQL 生成一个简易的 公历年历 TSQL 含日期所在月及年的周次

    --增加了日期所在月及年的周次!
    --星期日要算在"上一周"!(注意 WeekOfYear、WeekOfMonth 与 MyWeekOfYear、MyWeekOfMonth 的区别)
    --注意 datename 的值会因 SQL Server 语言版本或日期格式有所差异!
    --本测试环境为: SQL Server 2000 简体中文版 + Windows 简体中文版


    declare @ datetime
    set @ = '1995-02-25 11:00:50' -- 1995-01-01 正好是个星期日

    select @ as 日期
          ,dateadd(year,datediff(year,0,@),0) as 所在年的第一天
          ,dateadd(year,1+datediff(year,0,@),0)-1 as 所在年的最后一天
          ,dateadd(quarter,datediff(quarter,0,@),0) as 所在季的第一天
          ,dateadd(quarter,1+datediff(quarter,0,@),0)-1 as 所在季的最后一天
          ,dateadd(month,datediff(month,0,@),0) as 所在月的第一天
          ,dateadd(month,1+datediff(month,0,@),0)-1 as 所在月的最后一天
          ,dateadd(week,datediff(week,0,@),0) as 所在周的第一天
          ,dateadd(week,1+datediff(week,0,@),0)-1 as 所在周的最后一天


    select
     dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0))))) as [Date]
    ,datename(weekday,dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0)))))) as [WeekDayName]
    ,datepart(weekday,dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0)))))) as [WeekDay]
    ,(@@datefirst + datepart(weekday,dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0))))))) % 7 as [MyWeekDay]

    ,datepart(week,dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0)))))) as WeekOfYear
    ,datediff(week
                     ,case when (@@datefirst + datepart(weekday,dateadd(day,0,datediff(day,0,dateadd(year,datediff(year,0,@),0))))) % 7 = 1
                                then dateadd(day,-1,dateadd(day,0,datediff(day,0,dateadd(year,datediff(year,0,@),0))))
                           else dateadd(day,0,datediff(day,0,dateadd(year,datediff(year,0,@),0))) --date 所在年的第一天 即: 一月一号
                      end
                     ,case when (@@datefirst + datepart(weekday,dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0))))))) % 7 = 1
                                then dateadd(day,-1,dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0))))))
                           else dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0)))))
                      end
                    ) + 1 as MyWeekOfYear


    ,datediff(week,dateadd(day,1-day(dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0)))))),dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0)))))),dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0)))))) +1 as WeekOfMonth

    ,datediff(week
                     ,case when (@@datefirst + datepart(weekday,dateadd(month,datediff(month,0,dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0)))))),0))) % 7 = 1
                                then dateadd(month,datediff(month,0,dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0)))))),0) -1
                           else dateadd(month,datediff(month,0,dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0)))))),0)
                      end
                     ,case when (@@datefirst + datepart(weekday,dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0))))))) % 7 = 1
                                then dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0)))))-1
                           else dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0)))))
                      end
                    ) + 1 as MyWeekOfMonth

    ,datepart(dayofyear,dateadd(day,0,datediff(day,0,dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0)))))) as DayOfYear

    from
    (
    select 0 as i
    union all select 1 union all select 2 union all select 3
    union all select 4 union all select 5 union all select 6
    union all select 7 union all select 8 union all select 9
    union all select 10 union all select 11
    ) M
    ,
    (
    select 0 as i
    union all select 1 union all select 2 union all select 3 union all select 4 union all select 5
    union all select 6 union all select 7 union all select 8 union all select 9 union all select 10
    union all select 11 union all select 12 union all select 13 union all select 14
    union all select 15 union all select 16 union all select 17 union all select 18
    union all select 19 union all select 20 union all select 21 union all select 22
    union all select 23 union all select 24 union all select 25 union all select 26
    union all select 27 union all select 28 union all select 29 union all select 30
    ) d

    where datediff(month,dateadd(year,datediff(year,0,@),0),dateadd(day,d.i,dateadd(month,m.i,dateadd(year,datediff(year,0,@),0)))) = m.i
    order by [Date]

  • 相关阅读:
    DataGrid和GridView鼠标移动上面背景变色
    Javascript页面跳转常用代码(测试通过)
    设为首页,加入收藏夹
    Javascript实现金额千分位自动分位
    对用户输入内容进行字数提示功能
    Javascript网页刷新方法集锦(测试通过)
    asp.net 上传图片并作处理 水印 缩略图(测试OK)
    ASP.NET常用函数(参考用)
    Javascript弹出对话框 确定取消转到不同页面
    silverligth +wcf 下载文件
  • 原文地址:https://www.cnblogs.com/Microshaoft/p/2485780.html
Copyright © 2011-2022 走看看