SQL 判断两个时间段是否有交叉

系统 1974 0

费话不说,直接上代码

SQL 代码:

View Code
        
          IF
        
        
          EXISTS
        
         (
        
          SELECT
        
        
          *
        
        
          FROM
        
         sys.objects 
        
          WHERE
        
        
          object_id
        
        
          =
        
        
          OBJECT_ID
        
        (N
        
          '
        
        
          [dbo].[fun_GetTimeSlotDays]
        
        
          '
        
        
          ))


        
        
          DROP
        
        
          FUNCTION
        
        
          [
        
        
          dbo
        
        
          ]
        
        
          .fun_GetTimeSlotDays


        
        
          GO
        
        
          --
        
        
           =============================================
        
        
          

--
        
        
           Author:        <Mike.Jiang>
        
        
          

--
        
        
           Create date: <2012-07-18>
        
        
          

--
        
        
           Description:    <判断两个时间断是否有交叉,如果有则返回1,否则返回0>
        
        
          

--
        
        
           =============================================
        
        
          CREATE
        
        
          FUNCTION
        
        
           dbo.fun_GetTimeSlotDays(


        
        
          @fromDate
        
        
          DATETIME
        
        
          ,


        
        
          @toDate
        
        
          DATETIME
        
        
          ,


        
        
          @startDate
        
        
          DATETIME
        
        
          ,


        
        
          @endDate
        
        
          DATETIME
        
        
          

)


        
        
          RETURNS
        
        
          INT
        
        
          AS
        
        
          BEGIN
        
        
          DECLARE
        
        
          @ret
        
        
          INT
        
        
          ;

   
        
        
          IF
        
        (
        
          DATEDIFF
        
        (
        
          DAY
        
        ,
        
          @fromDate
        
        ,
        
          @endDate
        
        )
        
          >=
        
        
          0
        
        
          AND
        
        
          DATEDIFF
        
        (
        
          DAY
        
        ,
        
          @endDate
        
        ,
        
          @toDate
        
        )
        
          >=
        
        
          0
        
        
           )

      
        
        
          SET
        
        
          @ret
        
        
          =
        
        
          1
        
        
          ;

   
        
        
          IF
        
        (
        
          DATEDIFF
        
        (
        
          DAY
        
        ,
        
          @startDate
        
        ,
        
          @toDate
        
        )
        
          >=
        
        
          0
        
        
          AND
        
        
          DATEDIFF
        
        (
        
          DAY
        
        ,
        
          @toDate
        
        ,
        
          @endDate
        
        )
        
          >=
        
        
          0
        
        
           )

      
        
        
          SET
        
        
          @ret
        
        
          =
        
        
          1
        
        
          ;

   
        
        
          IF
        
         (
        
          @ret
        
        
          is
        
        
          null
        
        
          )

      
        
        
          SET
        
        
          @ret
        
        
          =
        
        
          0
        
        
          ;

   
        
        
          RETURN
        
        
          @ret
        
        
          ;


        
        
          END
        
        
          GO
        
      

 

测试代码:

      
        SELECT
      
       dbo.fun_GetTimeSlotDays(
      
        '
      
      
        2012-03-01
      
      
        '
      
      ,
      
        '
      
      
        2012-03-10
      
      
        '
      
      ,
      
        '
      
      
        2012-02-10
      
      
        '
      
      ,
      
        '
      
      
        2012-02-20
      
      
        '
      
      
        );


      
      
        SELECT
      
       dbo.fun_GetTimeSlotDays(
      
        '
      
      
        2012-03-01
      
      
        '
      
      ,
      
        '
      
      
        2012-03-10
      
      
        '
      
      ,
      
        '
      
      
        2012-02-01
      
      
        '
      
      ,
      
        '
      
      
        2012-03-01
      
      
        '
      
      
        );


      
      
        SELECT
      
       dbo.fun_GetTimeSlotDays(
      
        '
      
      
        2012-03-01
      
      
        '
      
      ,
      
        '
      
      
        2012-03-10
      
      
        '
      
      ,
      
        '
      
      
        2012-03-01
      
      
        '
      
      ,
      
        '
      
      
        2012-03-02
      
      
        '
      
      
        );


      
      
        SELECT
      
       dbo.fun_GetTimeSlotDays(
      
        '
      
      
        2012-03-01
      
      
        '
      
      ,
      
        '
      
      
        2012-03-10
      
      
        '
      
      ,
      
        '
      
      
        2012-03-10
      
      
        '
      
      ,
      
        '
      
      
        2012-03-11
      
      
        '
      
      
        );


      
      
        SELECT
      
       dbo.fun_GetTimeSlotDays(
      
        '
      
      
        2012-03-01
      
      
        '
      
      ,
      
        '
      
      
        2012-03-10
      
      
        '
      
      ,
      
        '
      
      
        2012-03-11
      
      
        '
      
      ,
      
        '
      
      
        2012-03-11
      
      
        '
      
      );
    

测试结果:

SQL 判断两个时间段是否有交叉

 

 

 

SQL 判断两个时间段是否有交叉


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论