Ниже приведены данные таблицы:
CREATE TABLE #tbl_period (
period_no INT,
period_from SMALLDATETIME,
period_to SMALLDATETIME
)
INSERT INTO #tbl_period (period_no, period_from, period_to)
VALUES (1, '2004-11-01 00:00:00', '2005-10-31 00:00:00')
INSERT INTO #tbl_period (period_no, period_from, period_to)
VALUES (2, '2005-11-01 00:00:00', '2006-10-31 00:00:00')
INSERT INTO #tbl_period (period_no, period_from, period_to)
VALUES (3, '2006-11-01 00:00:00', '2007-10-31 00:00:00')
INSERT INTO #tbl_period (period_no, period_from, period_to)
VALUES (4, '2007-11-01 00:00:00', '2008-10-31 00:00:00')
INSERT INTO #tbl_period (period_no, period_from, period_to)
VALUES (5, '2008-11-01 00:00:00', '2009-10-31 00:00:00')
INSERT INTO #tbl_period (period_no, period_from, period_to)
VALUES (6, '2009-11-01 00:00:00', '2010-10-31 00:00:00')
INSERT INTO #tbl_period (period_no, period_from, period_to)
VALUES (7, '2010-11-01 00:00:00', '2011-10-31 00:00:00')
SELECT * FROM #tbl_period
DROP TABLE #tbl_period
Теперь, цель состоит в том, чтобы получить period_no с двумя указанными датами, которые будут сравниваться с колонками period_from и period_to.
Example1:
date1 = '2010-11-01 00:00:00'
date2 = '2011-10-31 00:00:00'
Это вернет 7 как period_no
Example2:
date1 = '2005-11-01 00:00:00'
date2 = '2007-10-31 00:00:00'
Он не должен возвращать period_no, поскольку указанный диапазон дат не находится в диапазоне столбцов period_from и period_to в строке. Даты перекрытия не допускаются.
Правило состоит в том, чтобы извлекать period_no, если заданная дата 2 будет соответствовать или находиться в диапазоне столбцов period_from и period_to в строке.
Как выполнить этот запрос в T-SQL?
Заранее спасибо!