У меня есть запрос вроде:
SELECT ..
FROM ...
WHERE ...
AND ISNULL(ICA.actual_appearance_date, ICA.scheduled_appearance_date)
BETWEEN LO.order_start_date
AND ISNULL(LO.actual_expiry_date, LO.expected_expiry_date)
Есть ли удобный способ проверить, что фактическая_передача_даты находится между датой начала и окончания, но не включает время?
Дата появления - 03 октября 2011 года, 14:00 ... и даты, которые мы проверяем, - 3 октября 2011 года, 15:00 и 07 октября 2011 года: 10:00.
В данный момент это не даст результата из-за временных факторов.Мне нужно сделать только промежуточную часть даты ... Итак, между 03 октября 2011 года @ 00:00 и действительно 08 октября 2011 года @ 0:00.
Есть ли хороший способ сделать это?
Редактировать:
Мы разрабатываем для машины 2008 года, но мы разрабатываем машины на 2005 год.Длинная история, но я не могу использовать красивое и аккуратное исправление DATE.
Я пробую метод DATEADD, но нахожу проблему.
Это не возвращает ожидаемый результат:
DECLARE @Table TABLE
(
StartDate DATETIME,
EndDate DATETIME
)
INSERT INTO @Table VALUES ('02-Jan-2011 13:00:00', '07-Jan-2011 15:30:00')
SELECT * FROM @Table
DECLARE @Date DATETIME
SET @Date = '07-Jan-2011 16:00:00'
SELECT
CASE WHEN
@Date BETWEEN DATEADD(dd,DATEDIFF(dd,0,StartDate),0) AND DATEADD(dd, DATEDIFF(dd,0,EndDate),0)-- must cover the appearance date or still open
THEN 1
ELSE 0
END AS Result
FROM @Table
Должен ли я добавить +1 к ДАННЫМ МЕЖДУ, чтобы включить последнюю дату?«Между» не похоже на последнюю дату ..