Использование VBscript и SQL в базе данных Access, как выбрать записи на основе сравнения даты с сегодняшней датой - PullRequest
0 голосов
/ 30 мая 2020

Это звучит как очень наивный вопрос, но я не могу заставить это простое требование работать. Выбор делается на одной странице веб-сайта, которая передает параметр time_period (который равен 1, 7, 31 или 365) на следующую страницу, на которой должны быть перечислены все выбранные записи с датой LastUpdated (стандартное поле даты в Access db ) находится в пределах этого количества дней от текущей даты.

С одиночными числами di git (1 и 7) я получаю результат, но не на 100% точный, а с 31 и 365 - очень странные результаты. Я предполагаю, что где-то есть несоответствие в форматах, но я не могу найти решение.

Dim my_time_period
my_time_period = Request.QueryString("time_period")
selection_list.Source = "SELECT *  FROM document WHERE DateDiff('d',LastUpdated,now) <= '"+my_time_period+"'"

Я попытался жестко кодировать число, как показано ниже, но получил те же результаты.

selection_list.Source = "SELECT *  FROM document WHERE DateDiff('d',LastUpdated, now) <= '7'"

Я также пробовал использовать Today вместо now, но он вылетел как ошибка . Кто-нибудь может помочь? Спасибо

1 Ответ

0 голосов
/ 30 мая 2020

Вы сравниваете число

DateDiff('d',LastUpdated, now)

со строкой

'7'

Вместо этого сравните число с числом:

"SELECT *  FROM document WHERE DateDiff('d',LastUpdated,now) <= "+my_time_period

Обратите внимание на разницу : без одинарных кавычек

Также имейте в виду, что это приглашает SQL Инъекция.

Также имейте в виду, что в базе данных, которая использует индексы, это выражение следует переписать примерно так:

SELECT *  FROM document WHERE LastUpdated > DateAdd('d',now,-"+my_time_period+")"

Таким образом вы сравниваете столбец (который может быть проиндексирован) с фиксированным значением. Хотя в MS Access это не так важно

...