Предложение Temporal Tables Between - включены строки, которых не должно быть?

У меня есть темпоральная таблица SQL Server 2016. Я выполнил запрос, который можно увидеть ниже вместе с результатами. Мне любопытно, почему строка, выделенная зеленым цветом, включена. Значение ValidFrom возникает до даты начала «12.07.2018 19:16:00», а значение ValidTo — после даты окончания «12.07.2018 19:30:00».

Мое понимание BETWEEN / AND, которое может быть неверным, заключается в том, что оно находит все строки, измененные между двумя моментами времени.

введите здесь описание изображения


person Randy Minder    schedule 12.07.2018    source источник


Ответы (1)


Предложение BETWEEN во временной таблице показывает те строки, которые были активны в течение выбранного периода времени. Другими словами, строки, соответствующие этому набору критериев:

WHERE StartTime <= <EndDateTime> 
    AND EndTime > <StartDateTime>

Как вы можете видеть, для этого не требуется, чтобы фактическая отметка времени попадала в ваши МЕЖДУ датами.

person Laughing Vergil    schedule 12.07.2018
comment
Спасибо. Наверное, я неправильно понял, что делает BETWEEN. Знаете ли вы о встроенном способе определения того, какие строки были изменены в течение диапазона дат? - person Randy Minder; 13.07.2018
comment
Посмотрите на сравнение только ValidFrom в обычном запросе с условием FOR SYSTEM TIME ALL, что-то вроде WHERE ValidFrom BETWEEN @MyStart and @MyEnd FOR SYSTEM TIME ALL - person Laughing Vergil; 13.07.2018
comment
Хм. Обновление. Вы также хотите проверить, где находится ValidTo в вашем диапазоне, и ОБЪЕДИНИТЬ выходные строки. Это правильно обработает удаление строк. - person Laughing Vergil; 13.07.2018
comment
Наконец, если у вас есть диапазон для просмотра, вы можете использовать исходный запрос и добавить WHERE в ValidFrom или ValidTo. Это было бы более эффективно, поэтому, используя исходный запрос, добавьте WHERE ValidFrom BETWEEN @Start and @End OR ValidTo BETWEEN @Start and @End. - person Laughing Vergil; 13.07.2018