Сравнение дат в 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)