Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.031 c
1-1081972895
Вадим
2004-04-15 00:01
2004.05.02
Сократить имя файла


1-1082001029
bear9
2004-04-15 07:50
2004.05.02
Список выделенных компонентов в Tlistview


3-1080832854
Назаров Евгений
2004-04-01 19:20
2004.05.02
Непонятная ошибка в InterBase


3-1081007600
Unk
2004-04-03 19:53
2004.05.02
Проблема записи в BLOB поле: ORA-01403: no data found


1-1082026096
Ivolg
2004-04-15 14:48
2004.05.02
Печать