Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Выборка по полям с форматом даты

5.2K
06 февраля 2007 года
SerMax
96 / / 04.11.2006
Нужно сделать SQL запрос по полям, имеющий формат даты.
 
Код:
DM.QueryBirthday.SQL.Clear;
 DM.QueryBirthday.SQL.Add('Select * FROM MainTable Where Birthday=:fff ');
 DM.QueryBirthday.Active:=true;


По время создания программы создал параметр fff, тип ftDateTime,
value = 05.05.1988 (запись с такой датой рождения есть в БД).

делаю запуск программы - выдаётся пустой набор. ПОЧЕМУ ? !

HELP,Плз !!!

Вообще цель сделать выборку между двумя датами. Но сначала надо разобраться с этим...
8
06 февраля 2007 года
mfender
3.5K / / 15.06.2005
Тип данных ftDateTime - double, т.е. просто дата неточна. Нужно не Birthday=05.05.1988, а BETWEEN 05.05.1988 AND 06.05.1988
5.2K
12 февраля 2007 года
SerMax
96 / / 04.11.2006
Цитата: mfender
Тип данных ftDateTime - double, т.е. просто дата неточна. Нужно не Birthday=05.05.1988, а BETWEEN 05.05.1988 AND 06.05.1988



Выдаёт синтаксическую ошибку ... ((

263
12 февраля 2007 года
koltaviy
816 / / 16.12.2004
Цитата: SerMax
Выдаёт синтаксическую ошибку ... ((


 
Код:
.. BETWEEN #05.05.1988# AND #06.05.1988#
303
13 февраля 2007 года
makbeth
1.0K / / 25.11.2004
Цитата: koltaviy
 
Код:
.. BETWEEN #05.05.1988# AND #06.05.1988#


Кстати, необязательно. SerMax, посмотри документацию по SQL СУБД, которую используешь. В SQL Server, например, дата пишется в кавычках. Решетки - вроде формат Access. А вообще, странно, если у параметра указано ftDateTime, по идее должно автоматом конвертится в нужный формат...

5.2K
13 февраля 2007 года
SerMax
96 / / 04.11.2006
Цитата: koltaviy
 
Код:
.. BETWEEN #05.05.1988# AND #06.05.1988#



Select * From MainTable
Where Birthday BETWEEN #05.05.1988# AND #06.05.2000#

синтаксическая ошибка...с SQL мало работал, только вот что понадобится - изучу. Даже разницы в SQL СУБД разных не знаю (

242
13 февраля 2007 года
Оlga
2.2K / / 04.02.2006
попробуй:
 
Код:
Select * From MainTable
Where Birthday BETWEEN '05.05.1988' AND '06.05.2000'
5.2K
13 февраля 2007 года
SerMax
96 / / 04.11.2006
Пробовал и это, и много другое, дохожило до тупого метода подбора.
Ничего не помогает (
8
13 февраля 2007 года
mfender
3.5K / / 15.06.2005
Цитата: SerMax
Пробовал и это, и много другое, дохожило до тупого метода подбора.
Ничего не помогает (


Ну, товарищ, мы же тоже не знаем, какое БД у тебя и какой формат даты установлен в системных настройках. И, наверное, всё-таки правильнее DateTimeToStr(EncodeDateTime()) использовать...

263
13 февраля 2007 года
koltaviy
816 / / 16.12.2004
Цитата: SerMax
Select * From MainTable
Where Birthday BETWEEN #05.05.1988# AND #06.05.2000#

синтаксическая ошибка...с SQL мало работал, только вот что понадобится - изучу. Даже разницы в SQL СУБД разных не знаю (


 
Код:
Select * From MainTable
Where Birthday BETWEEN #05/05/1988# AND #05/06/2000#

Вот так пойдет?!!!
Формат даты: #mm/dd/yyyy#
5.2K
13 февраля 2007 года
SerMax
96 / / 04.11.2006
Цитата: koltaviy
 
Код:
Select * From MainTable
Where Birthday BETWEEN #05/05/1988# AND #05/06/2000#

Вот так пойдет?!!!
Формат даты: #mm/dd/yyyy#



Заработало ! Формат даты "краткий" mm.dd.yyyy.
Но этот вариант заработал. Всем спасибо за ответы!

263
13 февраля 2007 года
koltaviy
816 / / 16.12.2004
Цитата: SerMax
Заработало ! Формат даты "краткий" mm.dd.yyyy.
Но этот вариант заработал. Всем спасибо за ответы!


Ура, товарисчи!!:D

25K
02 марта 2007 года
tvrty
9 / / 02.03.2007
В общем, чтобы наверняка, то тут два варианта.
Либо даты передавать, как параметры, тогда компонента сама преабразует к double и корректно сравнит, либо самому привести дату к double.
Для TDataSet в Delphi:

1: q.commandtext:='Select * From MainTable Where Birthday BETWEEN :startDate and :endDate';
q.Parameters.ParamByName('startDate').Value:=startDate;
q.Parameters.ParamByName('endDate').Value:=endDate;
q.prepared:=true;
q.active:=true;

2: q.commandtext:='Select * From MainTable Where Birthday BETWEEN '+floattostr(startDate)+' and '+floattostr(endDate);
где startDate и endDate - TdateTime.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог