费话不说,直接上代码
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 ' );
测试结果: