Сравнение дат в SQL Server 2008

Я пытаюсь сравнить даты, но мой запрос не возвращает никакого результата. Любопытно, правильно ли я написал запрос?

SELECT *
FROM a, b               
WHERE
CONVERT(varchar(50),a.BirthDate, 101) between CONVERT(varchar(50),b.minage, 101) and CONVERT(varchar(50),b.maxage, 101)

Что-то не так с этим запросом сравнения дат??

Структура таблицы такова:

Table a:
Column Name     Datatype
Birthdate       Date

Table b's row:
Column Name     Datatype
minage          Date - calculated as : select DATEADD(year, -41, GETDATE())
maxage          Date - calculated as : select DATEADD(year, -21, GETDATE())

В таблице B, Minage, критерии максимума изменяются для каждой строки. Таким образом, диапазон может быть как minage 0 max age 20, minage 50 maxage 60 и т. Д.(Хотя диапазон не перекрывается).

Любая идея о том, что может быть не так в запросе?

Мне нужно сравнивать / рассчитывать только с датой, а не с часами или минутами.

3 ответа

Решение

Может быть, глупо с моей стороны.

Похоже, я должен был изменить порядок минейдж и макесс.

поэтому следующий запрос работает:

ВЫБРАТЬ *
ОТ А, В
ГДЕ CONVERT(varchar(50),a.BirthDate, 101) между CONVERT(varchar(50),b.maxage, 101) и CONVERT(varchar(50),b.minage, 101)

Не конвертируй свой date в string, Это может привести к недопустимому сравнению по строке и по дате.

... WHERE a.BirthDate between b.minage and b.maxage

Удалить всех новообращенных (в varchar)

SELECT *
FROM a, b               
WHERE
a.BirthDate between b.minage and b.maxage

если вам нужно удалить Time часть DateTime ты можешь сделать: CAST(a.BirthDate AS Date)

Другие вопросы по тегам