I have to write a stored procedure to find whether the given date range is overlapping the list of Date Ranges in the table.
Ex)
Database: SQL Server 2008 R2
SP Input: 2012-12-17 18:30:00.000 2012-12-19 18:29:59.000
SP Output(Out parameter): True/False
Booking Table Sample Data:
FromDate ToDate
2012-12-11 18:30:00.000 2012-12-12 18:29:59.000
2012-12-12 18:30:00.000 2012-12-13 18:29:59.000
2012-12-10 18:30:00.000 2012-12-11 18:29:59.000
2012-12-18 18:30:00.000 2012-12-19 18:29:59.000
2012-12-23 18:30:00.000 2012-12-28 18:29:59.000
2012-12-17 18:30:00.000 2012-12-18 18:29:59.000
2012-12-19 18:30:00.000 2012-12-22 18:29:59.000
2012-12-16 18:30:00.000 2012-12-17 18:29:59.000
2012-12-13 18:30:00.000 2012-12-14 18:29:59.000
2012-12-11 23:00:00.000 2012-12-12 22:59:59.000
Stored Procedure:
USE [BookingDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[FindConflict]
@FromDate datetime,
@ToDate datetime,
@IsConflict bit OUT
AS
BEGIN
?????????????????????(what to write here)
END
SQL:
USE [BookingDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[BookingAdmin](
[PK_BookingAdmin] [int] IDENTITY(1000,1) NOT NULL,
[FromDate] [datetime] NOT NULL,
[ToDate] [datetime] NOT NULL,
CONSTRAINT [PK_BookingAdmin] PRIMARY KEY CLUSTERED
(
[PK_BookingAdmin] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET IDENTITY_INSERT [dbo].[BookingAdmin] ON
INSERT [dbo].[BookingAdmin] ([PK_BookingAdmin], [FromDate], [ToDate]) VALUES (1048, CAST(0x0000A1240130DEE0 AS DateTime), CAST(0x0000A1250130DDB4 AS DateTime))
INSERT [dbo].[BookingAdmin] ([PK_BookingAdmin], [FromDate], [ToDate]) VALUES (1049, CAST(0x0000A1250130DEE0 AS DateTime), CAST(0x0000A1260130DDB4 AS DateTime))
INSERT [dbo].[BookingAdmin] ([PK_BookingAdmin], [FromDate], [ToDate]) VALUES (1050, CAST(0x0000A1230130DEE0 AS DateTime), CAST(0x0000A1240130DDB4 AS DateTime))
INSERT [dbo].[BookingAdmin] ([PK_BookingAdmin], [FromDate], [ToDate]) VALUES (1051, CAST(0x0000A12B0130DEE0 AS DateTime), CAST(0x0000A12C0130DDB4 AS DateTime))
INSERT [dbo].[BookingAdmin] ([PK_BookingAdmin], [FromDate], [ToDate]) VALUES (1052, CAST(0x0000A1300130DEE0 AS DateTime), CAST(0x0000A1350130DDB4 AS DateTime))
INSERT [dbo].[BookingAdmin] ([PK_BookingAdmin], [FromDate], [ToDate]) VALUES (1053, CAST(0x0000A12A0130DEE0 AS DateTime), CAST(0x0000A12B0130DDB4 AS DateTime))
INSERT [dbo].[BookingAdmin] ([PK_BookingAdmin], [FromDate], [ToDate]) VALUES (1055, CAST(0x0000A12C0130DEE0 AS DateTime), CAST(0x0000A12F0130DDB4 AS DateTime))
INSERT [dbo].[BookingAdmin] ([PK_BookingAdmin], [FromDate], [ToDate]) VALUES (1056, CAST(0x0000A1290130DEE0 AS DateTime), CAST(0x0000A12A0130DDB4 AS DateTime))
INSERT [dbo].[BookingAdmin] ([PK_BookingAdmin], [FromDate], [ToDate]) VALUES (1057, CAST(0x0000A1260130DEE0 AS DateTime), CAST(0x0000A1270130DDB4 AS DateTime))
INSERT [dbo].[BookingAdmin] ([PK_BookingAdmin], [FromDate], [ToDate]) VALUES (1058, CAST(0x0000A124017B0740 AS DateTime), CAST(0x0000A125017B0614 AS DateTime))
GO
CREATE PROCEDURE [dbo].[FindConflict]
@FromDate datetime,
@ToDate datetime,
@IsConflict bit OUT
AS
BEGIN
if exists (select * from BookingAdmin where FromDate = @ToDate and ToDate = @FromDate)
set @IsConflict = 1
else
set @IsConflict = 0
END
If I understood your needs correctly, and you just need to check if there’s exactly the same range in the table, you can try this
update if you want to know about overlapping ranges, try this
SQL FIDDLE EXAMPLE