![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Дата/ДатаВремя в SQL запросах БД Access [D7, Access]
Dmitry_177 © (2008-05-27 15:44:00)как правильно задавать Дату и ДатуВремя в SQL запросах в Access? К БД подключаюсь при помощи ADO.. Не понятно мне вот что: При добавлении новой записи в таблицу, я делаю так:
Дата:
INSERT INTO table (t_date)
VALUE ('27.10.2008')
ДатаВремя:
INSERT INTO table (t_datetime)
VALUE ('27.10.2008 21:30:00')
Вобщем формат Даты и ДатыВремени такой.. И все работает..
А вот если нужно сравнить дату, например:
SELECT *
FROM table
WHERE table.t_datetime = '27.10.2008 21:30:00'
то уже возникает ошибка..
Anatoly Podgoretsky (2008-05-29 16:50:00) [1]> Dmitry_177 (28.05.2008 11:40:17) [17]
Это не дает гарантии, что в условие попадут все записи за 27,10,2008 более того в текстовом виде вообще возможны разные сюрпризы.
Palladin (2008-05-29 07:58:00) [2]правильней (относительно) будет
q.SQL.Text:='insert into table (t_datetime) values (:PDateTime)';
q.Parameters.ParamByName('PDateTime').Value:=Date;
q.ExecSQL;
ну или то, что предложит sniknik :), но с тем же подходом с параметром...
Dmitry_177 (2008-05-28 23:59:00) [3]А при добавлении записи:
INSERT INTO table (t_datetime)
VALUE ('27.10.2008 21:30:00')
правильней будет тоже месяц/день/год ?
DiamondShark (2008-05-28 14:19:00) [4]
> т.е. так:
> SELECT * FROM table
> WHERE t_datetime BETWEEN #27/10/2008 00:00:00# AND #27/10/2008
> 23:59:59#
Лучше так:
WHERE t_datetime >= #27/10/2008 00:00:00# AND t_datetime < #28/10/2008 00:00:00#
Dmitry_177 (2008-05-28 11:40:00) [5]т.е. так:
SELECT * FROM table
WHERE t_datetime BETWEEN #27/10/2008 00:00:00# AND #27/10/2008 23:59:59#
?
Dmitry_177 (2008-05-28 11:39:00) [6]
SELECT * FROM table
WHERE t_datetime BETWEEN (#27/10/2008 00:00:00#, #27/10/2008 23:59:59#)
?
Правильный_Вася (2008-05-28 11:32:00) [7]BETWEEN
Dmitry_177 (2008-05-28 11:14:00) [8]Еще вопрос.. А как сравнить ДатаВремя с Датой?
т.е. есть:
ДатаВремя - 27.10.2008 21:30:00
и Дата - 27.10.2008
вот нужно сравнить только дату, попробовал сделать так:
SELECT * FROM table
WHERE t_datetime = #27/10/2008#
не сравнивается.. помогите
Правильный_Вася (2008-05-27 22:21:00) [9]использовать параметры в запросах
тогда никаких многозначностей не будет
Anatoly Podgoretsky (2008-05-27 21:44:00) [10]Пусть сначала моральный ущерб оплатит.
palva (2008-05-27 18:27:00) [11]
> Access запишет ее как 12 октября или 10 декабря?
Вы хотите, чтобы мы для вас попробовали?
Dmitry_177 (2008-05-27 17:05:00) [12]хм.. тут наверно может быть тогда ошибка..(((
вот к примеру наша дата 27.10.2008.. 27-го меся не бывает, поэтому меняет местами и все ок.. а будет такая 12.10.2008 дата? Access запишет ее как 12 октября или 10 декабря?
Anatoly Podgoretsky (2008-05-27 16:52:00) [13]> palva (27.05.2008 16:48:08) [8]
Когда меняет не страшно, страшно когда не меняет и ничего не говорит.
palva (2008-05-27 16:48:00) [14]По правилам нужно так #месяц/день/год#
Если Access обнаруживает, что дата невалидная он пробует поменять местами месяц и день.
MsGuns (2008-05-27 16:40:00) [15]>Dmitry_177 (27.05.08 16:19) [5]
>где-то накопал в интернете что нужно так: месяц/день/год хотя работает как я написал.. непонятно что-то..
Так не нужно.
Anatoly Podgoretsky (2008-05-27 16:23:00) [16]> MsGuns (27.05.2008 16:07:04) [4]
А в Акцесс хранится именно в этом формате, совпадает с TDateTime
Dmitry_177 (2008-05-27 16:19:00) [17]
> #27.10.2008 21:30:00# помоему так...
почти ))
#27/10/2008#
только не понятно еще, где-то накопал в интернете что нужно так: месяц/день/год хотя работает как я написал.. непонятно что-то..
MsGuns (2008-05-27 16:07:00) [18]>Anatoly Podgoretsky © (27.05.08 15:58) [3]
>Бесполезно сравнивать числа с плавающей запятой на абсолютную точность.
А причем здесь "числа с плавающей запятой" ?
Anatoly Podgoretsky (2008-05-27 15:58:00) [19]> MsGuns (27.05.2008 15:55:02) [2]
Бесполезно сравнивать числа с плавающей запятой на абсолютную точность.
MsGuns (2008-05-27 15:55:00) [20]Использовать параметрические запросы