SQL-запросы с поиском по диапазону дат

У меня есть таблица в базе данных Access 2007. Все поля текстового типа. Можно ли сделать следующее, используя предложение where? Если да, то как?

  • SELECT * from Table1 WHERE (ColumnDate между 26 и 19 марта 2010 г.)
  • SELECT * from Table1 WHERE (ColumnAge находится между 25 и 40)

Обычные операторы ‹ ‹= не работают.

Спасибо,


person tecno    schedule 26.03.2010    source источник


Ответы (4)


SELECT * from Table1 WHERE (CDATE(ColumnDate) BETWEEN #03/26/2010# AND #03/19/2010#)
SELECT * from Table1 WHERE (CINT(ColumnAge) between 25 and 40)

Даты представлены в Access между # символами в #MM/DD/YYYY#. Вы действительно должны хранить дату как поле даты :)

person Codesleuth    schedule 26.03.2010
comment
Спасибо, мне нужно найти тех, кому от 25 до 40 лет включительно. - person tecno; 26.03.2010
comment
BETWEEN результаты включают оба значения внешнего диапазона. Вы должны получить тех людей в возрасте от 25 до 40 лет. - person Codesleuth; 26.03.2010
comment
Спасибо Еще раз, ценю это. - person tecno; 26.03.2010

SELECT * from Table1 WHERE ColumnDate between '2010-03-26' and '2010-03-19'
SELECT * from Table1 WHERE ColumnAge between 25 and 40

Я не использую Access, поэтому YMMV.

person Marcelo Cantos    schedule 26.03.2010
comment
Вы не используете Access и разместили SQL, который не будет работать в Access. Первый будет работать, если в столбце все даты хранятся в формате гггг-мм-дд, но не иначе. Второй не сработает, потому что в исходном вопросе говорилось, что все поля текстовые. - person David-W-Fenton; 26.03.2010

Попробуйте преобразовать ColumnDate в фактическую дату/время с помощью функции CDate. Я думаю, преобразование в int можно выполнить с помощью CInt.

Я не использую Access, так что это просто предположение здравого смысла.

person Anton Gogolev    schedule 26.03.2010
comment
Это встроенные функции SQL, если да, то как они вызываются в запросе. Пример приветствуется. - person tecno; 26.03.2010
comment
На самом деле ответ Антона Гоголева напомнил мне, чтобы я включил их в свою выборку. Так что он заслуживает плюса от меня :) - person Codesleuth; 26.03.2010

Mr.David-W-Fenton прав, говоря, что первый SELECT * from Table1 WHERE ColumnDate between '2010-03-26' and '2010-03-19' Марсело не работает, и неправильно предлагая причину. Предложение неверно из-за кавычек вокруг строковых представлений дат, формат даты вполне в порядке. Так что я бы предположил

SELECT * from Table1 WHERE CDATE(ColumnDate) between #2010-03-26# and #2010-03-19#

как правильное решение.

person Alexey Khoroshikh    schedule 30.11.2012
comment
Уф, ты прав, я только что следил за Марсело. Спасибо, исправляю запрос. - person Alexey Khoroshikh; 02.12.2012