Я столкнулся с проблемой, аналогичной этой, преобразовав значение DateTime в целое число минут с 1 января 2000 года и записав это значение в столбец в моей таблице базы данных.Поэтому (в вашем случае) таблица будет выглядеть следующим образом:
create table temp2
(
id int identity primary key,
timeValue int not null
)
Чтобы сравнить с этой таблицей, просто преобразуйте значение сравнения в целое число минут (для этого я использую пользовательскую функцию)и сравни.
DECLARE @newTime int;
SET @newTime = dbo.fnGetComparisonTime(@DateTimeValue)
Затем получите ваши данные:
SELECT id, timeValue
FROM temp2
WHERE timeValue NOT BETWEEN (@newTime - 1) AND @newTime;
И функция преобразования времени в целочисленные минуты?
CREATE FUNCTION dbo.fnGetComparisonTime
(
@DateTimeValue datetime
)
RETURNS int
AS
BEGIN
-- Declarations
DECLARE @Output int
DECLARE @StartDate datetime
SET @StartDate = '2000-01-01 00:00:00'
SET @Output = DATEDIFF(minute, @StartDate, @ReportDateTime)
-- And we're done!
RETURN @Output
END
Вы можете поиграть с оператором SELECT,конечно, чтобы получить результаты, которые вы хотите.Преобразование значений DateTime в минуты - это ПУТЬ быстрее, чем обработка с датами напрямую.
Вы можете спросить - есть ли проблема Y2K с этим?(В конце концов, у вас не хватит минут на 31 ^ 2 - 1 минуту.) Да, примерно через 7000 лет.Обязательно тщательно документируйте свой код ....