Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.037 c
1-1081881050
ЧупаЧупс
2004-04-13 22:30
2004.05.02
Окружности


1-1082109103
СП
2004-04-16 13:51
2004.05.02
TForm


6-1078052415
Esc
2004-02-29 14:00
2004.05.02
Packet driver or ...???


6-1078947690
3APA3A
2004-03-10 22:41
2004.05.02
Какими компонентами можно передать Stream


4-1074747407
GrayFace
2004-01-22 07:56
2004.05.02
Есть ProcessId Как получить hProcess, его ветки, юзера, %CPU?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский