Сегодня я столкнулся с проблемой на работе. Мне нужно было выполнить запрос по времени, но результаты запроса были неверными. Например, если вы хотите узнать участников, которые зарегистрировались на веб-сайте в период с 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) требуется дата. Вариант или текст, представляющий дату, к которой нужно добавить интервал.
настраивать
Параметр интервал может иметь следующие значения:
Описание настройки
гггг год
q квартал
м месяц
y количество дней в году
день
д День недели
WW недели
ч часов
n минут
с секунды
иллюстрировать
Вы можете использовать функцию DateAdd, чтобы добавить или вычесть указанный интервал времени из даты. Например, вы можете использовать DateAdd для расчета даты через 30 дней от текущего дня или времени через 45 минут. Чтобы добавить временной интервал в днях к дате, вы можете использовать дни года (y), дни (d) или дни недели (w).
Функция DateAdd не возвращает недопустимые даты. В следующем примере к 31 января 1995 г. добавляется один месяц:
НоваяДата = ДатаДобавить(м, 1, 31 января 1995 г.)
В этом примере DateAdd возвращает 28 февраля 1995 г., а не 31 февраля 1995 г. Если дата — 31 января 1996 г., возвращается 29 февраля 1996 г., поскольку 1996 г. — високосный год.
Если рассчитанная дата предшествует 100 году нашей эры, произойдет ошибка.
Если число не является длинным значением, перед вычислением оно округляется до ближайшего целого числа.
2. Вычитание даты
Функция DateDiff
Возвращает временной интервал между двумя датами.
DateDiff(интервал, дата1, дата2 [, первый день недели[, первая неделя года]])
Синтаксис функции DateDiff имеет следующие параметры:
(1) требуется интервал. Строковое выражение, используемое для вычисления интервала времени между датой1 и датой2. Числовые значения см. в разделе «Настройки».
(2) необходимы данные date1, date2. Выражение даты. Для расчета используются две даты.
(3) Первый день недели необязательно. Константа, определяющая первый день недели. Если не указано, по умолчанию используется воскресенье. Числовые значения см. в разделе «Настройки».
(4) Первая неделя года по желанию. Константа, указывающая первую неделю года. Если не указано, по умолчанию используется неделя с 1 января. Числовые значения см. в разделе «Настройки».
настраивать
Параметр интервал может иметь следующие значения:
Описание настройки
гггг год
q квартал
м месяц
y количество дней в году
день
д День недели
WW недели
ч часов
n минут
с секунды
Параметр firstdayofweek может иметь следующие значения:
Описание постоянного значения
vbUseSystem 0 Использовать настройку API поддержки национальных языков (NLS).
vbSunday 1 воскресенье (по умолчанию)
vbMonday 2 понедельник
vbВторник 3 Вторник
vbСреда 4 среда
vbЧетверг 5 Четверг
vbПятница 6 Пятница
vbСуббота, 7 Суббота
Параметр firstweekofyear может иметь следующие значения:
Описание постоянного значения
vbUseSystem 0 Использовать настройку API поддержки национальных языков (NLS).
vbFirstJan1 1 Начинается с недели 1 января (по умолчанию).
vbFirstFourDays 2 начинается с первой недели нового года, состоящей как минимум из четырех дней.
vbFirstFullWeek 3 начинается с первой полной недели нового года.
иллюстрировать
Функция 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, что указывает на разницу в один год.