博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
任意两个时间之间的星期几的次数-横.sql
阅读量:6256 次
发布时间:2019-06-22

本文共 2569 字,大约阅读时间需要 8 分钟。

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_weekdaycount]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_weekdaycount]
GO
/*--计算任意两个时间之间的星期几的次数(横向显示)
    本方法直接判断 @@datefirst 做对应处理
    不受 sp_language 及 set datefirst 的影响     
--邹建 2004.08(引用请保留此信息)--*/
/*--调用示例
    
    select * from f_weekdaycount('2004-9-01','2004-9-02')
--*/
create function f_weekdaycount(
@dt_begin datetime,
@dt_end datetime
)returns table
as
return(
    select 跨周数
        ,周一=case a
            when -1 then case when 1 between b and c then 1 else 0 end
            when  0 then case when b<=1 then 1 else 0 end
                    +case when c>=1 then 1 else 0 end
            else a+case when b<=1 then 1 else 0 end
                +case when c>=1 then 1 else 0 end
            end
        ,周二=case a
            when -1 then case when 2 between b and c then 1 else 0 end
            when  0 then case when b<=2 then 1 else 0 end
                    +case when c>=2 then 1 else 0 end
            else a+case when b<=2 then 1 else 0 end
                +case when c>=2 then 1 else 0 end
            end
        ,周三=case a
            when -1 then case when 3 between b and c then 1 else 0 end
            when  0 then case when b<=3 then 1 else 0 end
                    +case when c>=3 then 1 else 0 end
            else a+case when b<=3 then 1 else 0 end
                +case when c>=3 then 1 else 0 end
            end
        ,周四=case a
            when -1 then case when 4 between b and c then 1 else 0 end
            when  0 then case when b<=4 then 1 else 0 end
                    +case when c>=4 then 1 else 0 end
            else a+case when b<=4 then 1 else 0 end
                +case when c>=4 then 1 else 0 end
            end
        ,周五=case a
            when -1 then case when 5 between b and c then 1 else 0 end
            when  0 then case when b<=5 then 1 else 0 end
                    +case when c>=5 then 1 else 0 end
            else a+case when b<=5 then 1 else 0 end
                +case when c>=5 then 1 else 0 end
            end
        ,周六=case a
            when -1 then case when 6 between b and c then 1 else 0 end
            when  0 then case when b<=6 then 1 else 0 end
                    +case when c>=6 then 1 else 0 end
            else a+case when b<=6 then 1 else 0 end
                +case when c>=6 then 1 else 0 end
            end
        ,周日=case a
            when -1 then case when 0 between b and c then 1 else 0 end
            when  0 then case when b<=0 then 1 else 0 end
                    +case when c>=0 then 1 else 0 end
            else a+case when b<=0 then 1 else 0 end
                +case when c>=0 then 1 else 0 end
            end
    from(
        select 跨周数=case when @dt_begin<@dt_end
                then (datediff(day,@dt_begin,@dt_end)+7)/7
                else (datediff(day,@dt_end,@dt_begin)+7)/7 end
            ,a=case when @dt_begin<@dt_end
                then datediff(week,@dt_begin,@dt_end)-1
                else datediff(week,@dt_end,@dt_begin)-1 end
            ,b=case when @dt_begin<@dt_end
                then (@@datefirst+datepart(weekday,@dt_begin)-1)%7
                else (@@datefirst+datepart(weekday,@dt_end)-1)%7 end
            ,c=case when @dt_begin<@dt_end
                then (@@datefirst+datepart(weekday,@dt_end)-1)%7
                else (@@datefirst+datepart(weekday,@dt_begin)-1)%7 end)a
)
go

转载地址:http://kbnsa.baihongyu.com/

你可能感兴趣的文章
Oracle-常用监控SQL语句
查看>>
php-mvc新闻项目体会-1
查看>>
List 无限分类生成树结构
查看>>
在VIM编辑文本时不退出VIM前提下执行linux命令
查看>>
关于 self 和static的区别
查看>>
默认Web字体样式
查看>>
oracle 约束
查看>>
在索智SC3807VS EVB上调试开发以太网功能(使用V3s的内部EMAC+PHY)
查看>>
C语言实现的PadLeft,在str的左边使用bychar补齐为指定的长度
查看>>
nginx 重启命令
查看>>
如何使用Pig集成分词器来统计新闻词频?
查看>>
RabbitMQ安装(CentOS 7 64位)
查看>>
Tomcat不同版本所对应的Servlet/JSP规范
查看>>
Java正则零宽断言出现PatternSyntaxException异常
查看>>
sqlyog快捷键
查看>>
一花一世界 一叶一菩提
查看>>
Ubuntu锐捷上网问题
查看>>
阿里如何将“高峰前扩容、高峰后缩容”的梦想照进现实?
查看>>
离线部署额外域控制器,Active Directory系列之六
查看>>
Discuz! Ucenter X2.5忘记创始人密码
查看>>