Сегодня я столкнулся с проблемой на работе. Мне нужно было выполнить запрос по времени, но результаты запроса были неверными. Например, чтобы узнать участников, зарегистрировавшихся на веб-сайте в период с 12 октября 2007 г. по 31 октября 2007 г., после выбора даты нажмите кнопку «Запросить», чтобы найти участников, зарегистрировавшихся 31 октября 2007 г. Информация вообще не отображается, а результаты после нескольких тестов одинаковы. Отладчик обнаружил проблему с оператором SQL.
Оператор SQL выглядит следующим образом: SELECT * FROM userinfo WHERE regtime >= '2007-10-12' AND regtime <= '2007-10-31'. На первый взгляд кажется, что в этом операторе SQL нет никакой ошибки, но после сравнения значений, сохраненных в соответствующих полях базы данных, обнаруживается, что сохраненные значения не имеют простой формы. дата, но в виде даты + времени, то есть: гггг-ММ-дд ЧЧ:мм :сс, когда оператор SQL определяет размер времени регистрации и «2007-10-31», он будет думать, что «2007- 10-31' записано неполностью, поэтому два значения не будут считаться равными. Что делать?
Не волнуйтесь, ASP предоставляет нам функции сложения и вычитания дат, которые помогут нам решить эту проблему.
1. Добавление даты
Функция DateAdd возвращает дату, к которой был добавлен указанный интервал времени.
DateAdd(интервал, число, дата)
Синтаксис функции DateAdd имеет следующие параметры (1) требуется интервал. Строковое выражение, представляющее добавляемый интервал времени. Значения см. в разделе «Настройки».
(2) Требуется номер. Числовое выражение, указывающее количество добавляемых интервалов времени. Числовые выражения могут быть положительными (получение даты в будущем) или отрицательными (получение даты в прошлом).
(3) требуется дата. Вариант или текст, представляющий дату, к которой нужно добавить интервал.
Описание Вы можете использовать функцию DateAdd, чтобы добавить или вычесть указанный интервал времени из даты. Например, вы можете использовать DateAdd для расчета даты через 30 дней или времени через 45 минут. Чтобы добавить временной интервал в «днях» к дате, вы можете использовать «дни года» («y»), «дни» («d») или «дни недели» («w»).
Функция DateAdd не возвращает недопустимые даты. В следующем примере к 31 января 1995 г. добавляется один месяц:
NewDate = DateAdd("m", 1, "31-Jan-95").
В этом примере DateAdd возвращает 28 февраля 1995 г., а не 31 февраля 1995 г. Если дата — 31 января 1996 г., возвращается 29 февраля 1996 г., поскольку 1996 г. — високосный год.
Если рассчитанная дата предшествует 100 году нашей эры, произойдет ошибка.
Если число не является длинным значением, перед вычислением оно округляется до ближайшего целого числа.
2. Вычитание даты Функция DateDiff возвращает интервал времени между двумя датами.
DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]])
Синтаксис функции DateDiff имеет следующие параметры:
(1) требуется интервал. Строковое выражение, используемое для расчета временного интервала между датой1 и датой2. Значения см. в разделе «Настройки».
(2) необходимы данные date1, date2. Выражение даты. Для расчета используются две даты.
(3) Первый день недели необязательно. Константа, определяющая первый день недели. Если не указано, по умолчанию используется воскресенье. Значения см. в разделе «Настройки».
(4) Первая неделя года по желанию. Константа, определяющая первую неделю года. Если не указано, по умолчанию используется неделя с 1 января. Значения см. в разделе «Настройки».
Описание Функция DateDiff используется для определения количества указанных временных интервалов, существующих между двумя датами. Например, вы можете использовать DateDiff для расчета количества дней между двумя датами или количества недель между сегодняшним днем и последним днем года.
Чтобы вычислить количество дней между датой 1 и датой 2, вы можете использовать «дни в году» («y») или «дни» («d»). Если интервал равен «дню недели» («w»), DateDiff возвращает количество недель между двумя датами. Если дата1 — понедельник, DateDiff подсчитывает количество понедельников до даты2. Этот результат содержит дату 2, но не дату 1. Если интервал равен «неделе» («ww»), функция DateDiff возвращает количество недель между двумя датами в таблице календаря. Функция подсчитывает количество воскресений между датой 1 и датой 2. DateDiff будет оценивать дату2, если дата2 — воскресенье, но не дату1, даже если дата1 — воскресенье.
Если дата1 позже даты2, функция DateDiff возвращает отрицательное число.
Аргумент firstdayofweek влияет на вычисления с использованием символов-разделителей «w» и «ww».
Если дата1 или дата2 является литералом даты, указанный год становится фиксированной частью даты. Но если дата1 или дата2 заключена в кавычки (""), а год опущен, текущий год будет вставляться каждый раз, когда выражение даты1 или дата2 оценивается в коде. Это дает возможность писать программный код, работающий в разные годы.
Если интервал равен «году» («гггг»), сравните 31 декабря с 1 января следующего года. Хотя на самом деле разница составляет всего один день, DateDiff возвращает 1, что указывает на разницу в один год.