Главная страница
    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.033 c
3-1081240486
Sirus
2004-04-06 12:34
2004.05.02
Как бы организовать выборку из процедур???


9-1069619329
DDS
2003-11-23 23:28
2004.05.02
Не могу поместить один GL_POLYGON перед другим, ерунда какая-то..


1-1082036755
highlander
2004-04-15 17:45
2004.05.02
Печать на матричном принтере.


7-1077518181
SDW-syscoder
2004-02-23 09:36
2004.05.02
Нулевое кольцо защиты (Ring0)


11-1064221574
RA
2003-09-22 13:06
2004.05.02
BitBtn картинка





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский