Форум: "Базы";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
Внизinteger --> datetime. Как это сделать в запросе? Найти похожие ветки
← →
SergP © (2004-04-04 16:45) [0]БД Access
В таблице имеется поле integer.
Как написать select, чтобы вместо этого поля я получил в результате запроса поле типа DateTime, представляющее собой фиксированую дату/время плюс имеющееся в таблице значение вышеупомянутого поля типа integer, в качестве кол-ва секунд?
← →
sniknik © (2004-04-04 18:43) [1]select DateAdd("s", поле_integer, FixDate) ....
← →
SergP © (2004-04-04 21:04) [2]Хм.. А можно немного подробнее про сам формат написания даты/времени ?
Т.е. если у меня FixDate = 1 января 1970г. 0:00:00, то как это написать?
← →
sniknik © (2004-04-04 23:41) [3]можно как 25569, т.е.
select DateAdd("s", поле_integer, 25569) ....
при значении поля интеджер - 50 например выдаст результат 01.01.1970 0:00:50
а вообще какая разница? ведь это поле "типа DateTime" сам сказал, а это число какой у него может быть формат? так и подставляй поле.
← →
SergP © (2004-04-06 14:56) [4]Пробовал. вроде не хочет такое работать...
Хотя я уже нашел как правильно Access"овских SQL- запросах записывать числа в формате datetime.
Но вот откуда это число 25569 ?
И вообще такой вопрос: В БД MySQL часто используется поля с датой/временем типа integer ( int(11) ) где как я понял хранится число представляющее собой кол-во секунд прошедших от какой-то даты. Приблизительно прикинув я решил что эта дата 01.01.1970 0:00. Но теперь думаю что это не совсем точно. Какая на самом деле эта дата?
01.01.1970 0:00 - 25569 сек??? Если да, то откуда взялось такое нецелое число? Кто и зачем так придумал?
← →
sniknik © (2004-04-06 15:46) [5]> Пробовал. вроде не хочет такое работать...
если у тебя не работает то зачем тебе это?
> Хотя я уже нашел как правильно Access"овских SQL- запросах записывать числа в формате datetime.
да ну? небось открыл для себя скобочки ##? ;о))
и вроде изначально не это спрашивал, а как добавить интеджер поле к дате в качестве количества секунд. (вот именно на это и ответ)
а сделай такой запрос
SELECT #13/01/1970#,#01/13/1970#
прям как здесь, что наблюдаем?
> Какая на самом деле эта дата? 01.01.1970 0:00 - 25569 сек???
не сек. - дней.
посмотри
SELECT CInt(#01/01/1970#)
> Кто и зачем так придумал?
;о))))
так исторически сложилось....
← →
SergP © (2004-04-06 16:57) [6]>не сек. - дней.
Если дней, то тогда понятно.
>если у тебя не работает то зачем тебе это?
У меня в базе MySQL на сервере есть поля типа int(11), поэтому и в локальной базе access я для хранения этой даты сделал аналогичное поле, чтобы не усложнять все. (я обновляю лок базу с сервера по http).
А теперь например в DBGRID хочу отобразить дату в нормальном виде, а не в кол. секунд от какого-то момента.
Поэтому и нужно было написать запрос, где бы данный integer преобразовывался бы в datetime.
← →
sniknik © (2004-04-06 17:29) [7]> где бы данный integer преобразовывался бы в datetime
интеджер в дататайм! а не секунд в интеджере добавить к дате как в начальном задал. тогда понятно почему
> Пробовал. вроде не хочет такое работать...
не те даты видиш какие ожидал?
если дата представдена числом в "правильном" формате то просто перевести ее в дататайм легко
вот посмотри
SELECT CDate(25569)
и все, на месте константы может быть поле
(зачем вначале секунды приплел непонятно, запутал только)
согласись не одно и тоже
> представляющее собой фиксированую дату/время плюс имеющееся в таблице значение вышеупомянутого поля типа integer, в качестве кол-ва секунд
и
> где бы данный integer преобразовывался бы в datetime.
← →
SergP © (2004-04-06 18:02) [8]
> > Пробовал. вроде не хочет такое работать...
> не те даты видиш какие ожидал?
Запрос в таком случае не работает. Ошибка вылазит...
> если дата представдена числом в "правильном" формате то
> просто перевести ее в дататайм легко
> вот посмотри
> SELECT CDate(25569)
> можно как 25569, т.е.
> select DateAdd("s", поле_integer, 25569) ....
Может нужно было так сделать:
select DateAdd("s", поле_integer, CDate(25569)) ???
> и все, на месте константы может быть поле
> (зачем вначале секунды приплел непонятно, запутал только)
>
> согласись не одно и тоже
> > представляющее собой фиксированую дату/время плюс имеющееся
> в таблице значение вышеупомянутого поля типа integer, в
> качестве кол-ва секунд
> и
> > где бы данный integer преобразовывался бы в datetime.
Хорошо... Скажу по другому:
Имеется поле integer которое представляет собой кол. секунд от определенной даты. (Вобщем я думаю Вы поняли что это за формат такой, он часто используется для хранения дат в поле integer в базах).
Нужно в запросе получить из него поле типа DateTime.
Как это сделать более правильно?
пока юзаю select DateAdd("s", поле_integer, #1/1/1970#) as MyDate .....
← →
sniknik © (2004-04-06 18:33) [9]> Может нужно было так сделать:
> select DateAdd("s", поле_integer, CDate(25569)) ???
можно и так, но обычно такое простое приведение типа делается автоматически (у меня так), что наводит на мысль что у тебя jet устарел, скачай обновление с мелкософта.
> Хорошо... Скажу по другому:
> ...
а значит всетаки добавление секунд к дате.
> пока юзаю select DateAdd("s", поле_integer, #1/1/1970#) as MyDate .....
работает, так и оставь так, или "определенная дата" может менятся? подставь на это место параметр и задавай из программы. (дате при задании параметра надо будет Trunk делать, мусор в секундах убирать)
← →
SergP © (2004-04-06 20:23) [10]
> или "определенная дата" может менятся?
пока не замечал такого... Исследовал несколько баз от разных форумов, и во всех получается что дата которой соответствовал бы 0 является 1.1.1970 (ну может это не совсем точно, но погрешности более чем в несколько часов быть не должно).
> что наводит на мысль что у тебя jet устарел
Даже если и так, то думаю нецелесообразно скачивать новый и писать запросы которые бы работали только на новом, так как вдруг у кого-то стоит такой же самый JET, и тогда у него прога работать не будет.
> работает, так и оставь так
А насчет этого просто у меня есть небольшие сомнения в том что вдруг у кого-то установлен другой формат даты/времени, и там пришлось бы писать не #1/1/1970#, а что-либо например #1970/1/1#) или еще как-нить... Или настройки винды не влияют на способ записи дат в SQL запросах Access"а?
← →
sniknik © (2004-04-06 21:11) [11]> а что-либо например #1970/1/1#
;о)))
а ты попробуй, прям счас на том что у тебя есть, 90% что сработает.
(уже предлагал подобный запрос в [5])
еще раз, выполни
SELECT #1970/01/01#
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.033 c