powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / SQL запросы и формат данных дата
18 сообщений из 18, страница 1 из 1
SQL запросы и формат данных дата
    #32228950
Люди, люди, человеки! (с) х/ф "Гараж"
Объясните мне пожалуйста, что плохого в том что я использую CLng
(как то меня ЛП упрекнул)
для преобразования даты в SQL. А то я его повсемесино использую
Ведь по-моему и запрос сипатишнее смотриться без хэшиков(#) и Jetу понятнее (не надо преводить дату в свой формат).

судите сами:
SQLCmd = "SELECT * FROM any_table WHERE (my_date = " & CLng(my_date.Value) & ")"
SQLCmd = "SELECT * FROM any_table WHERE (my_date = #" & Format(my_date.Value, "mm-dd-yyyy") & "#)"

Да кстати еще вопрос. Что хранится в дробной части даты?
Вроде должно лежать количество частей секунды (1 часть = 0.00333 секунды). Посчитал и не выходит.
Или совсем математику забыл :-(
...
Рейтинг: 0 / 0
SQL запросы и формат данных дата
    #32228965
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
В дробной части даты лежит дробная часть от целой части. :^) То есть от дня.

А перевод в лонг опасен вот чем. (Не знаю, что имел в виду ЛП, но у меня есть по крайней мере одно соображение.) Целая часть - это количество дней от некой даты "сотворения компьютера" до данной даты. Но эта дата "сотворения компьютера" на SQL сервере и в Аксессе разная, она отличается на 1 день.
...
Рейтинг: 0 / 0
SQL запросы и формат данных дата
    #32228981
>В дробной части даты лежит дробная часть от целой части. :^) То есть от дня.
Я вроде так и считал
часы * 3600 + минуты * 60 + секунды.

> Но эта дата "сотворения компьютера" на SQL сервере и в Аксессе разная, она отличается на 1 день.
Спасибо. Есть над чем подумать.
...
Рейтинг: 0 / 0
SQL запросы и формат данных дата
    #32228992
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> часы * 3600 + минуты * 60 + секунды

А теперь это все делим на 60*60*24 и записываем как десятичную дробь.
...
Рейтинг: 0 / 0
SQL запросы и формат данных дата
    #32229002
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я?? В чем то упрекнул?? Да я бы сразу нах послал

Дата - число с плавающей точкой. Причем еще и формат разный на разных системах (как написал Саныч)
Ты его сравниваешь с целым. Ну и хто ты после этого?

Я так вообще стараюсь динамически не формировать SQL-запросы с критериями. Только если припрет. А так - запрос с параметрами сделал, параметр типа дата/время, в коде в этот параметр запихал переменную типа Date, и пусть у аксеса голова болит о преобразовании типов, формате даты, региональных настройках и прочей пофуистике. Не мое дело это знать, мое дело это не знать.
...
Рейтинг: 0 / 0
SQL запросы и формат данных дата
    #32229014
2 Владимир Саныч
Спасибо огромное

2 ЛП
> Ты его сравниваешь с целым. Ну и хто ты после этого?
А ты думаешь Jet что делает когда встречает # ?
Где использовал везде работало, по крайне мере где не использовалось время
Приведи пример кода не заработает, ато я бюсь и не получается
...
Рейтинг: 0 / 0
SQL запросы и формат данных дата
    #32229020
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем пример кода? Я тебе приведу пример данных

Забей в таблицу помимо даты еще и время (наплевав на мифический формат отображения даты).
Попробуй своим способом эту запись найти.
GO
...
Рейтинг: 0 / 0
SQL запросы и формат данных дата
    #32229045
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык, а зачем тогда вообще хранить DateTime? Храни целое число.
Я в одном из проектов так и делал, для экономии места. int32 вместо DateTime.

Действительно, дата, переведенная в целое/float отличается на 1 день в варианте Access и MS SQL, так что такое подход нужно применять или ко всем полям базы, или не применять вообще. (ечли только не увлекаемя садомазохизмом).

У меня сервак вообще понятия не имел, что это дата или время - и то и другое хранил отдельно или вместе по мере надобности, как целое, float или double для Date, Time и DateTime полей соответственно, т.е. он с ними работал прочто как с числами, (иногда только Date+Time склеивал или расклеивал в запросах и процедурах, или извлекал требуемую часть, но ВСЕГДА работал именно как с числами).

А вот на клиенте программа "знала" что это именно поля даты, и все ok.

Успехов.
...
Рейтинг: 0 / 0
SQL запросы и формат данных дата
    #32229069
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм.. Хранить как число... Тож вариант.
Только придется на клиенте каждый раз это преобразовывать из числа в дату... И время может быть больше одного дня (если условий на значение не накладывать)... Все решаемо конечно.
В принципе идея хорошая. Если преобразований туда-сюда не пугаться. И не забыть про отличия на 1 в момент переноса.
...
Рейтинг: 0 / 0
SQL запросы и формат данных дата
    #32229113
2 vdimas
Для SQL Server я так и делаю, гемороя меньше. Я для mdb в самый раз.

2 ЛП
>Забей в таблицу помимо даты еще и время (наплевав на мифический формат отображения даты).
>Попробуй своим способом эту запись найти.
я и не спорю что со временем не работает, но для времени я сделаю преобразование в дробное ( не с помощью Cdbl :-)). В основном используется либо дата либо время.
А неявные преобразования не есть хорошо. Нужно чтобы они становились явными. Тогда жизнь покажется медом!
...
Рейтинг: 0 / 0
SQL запросы и формат данных дата
    #32229119
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я и не спорю что со временем не работает
ну а я не пишу программы, которые иногда работают, а иногда нет.
...
Рейтинг: 0 / 0
SQL запросы и формат данных дата
    #32232150
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блин, дурацкий mail.ru не шлет мне посты :((

c опозданием:
ЛП И не забыть про отличия на 1 в момент переноса
в том вся фишка, что никакого 1 нет, т.к. на SQL серваке - это числа! Он не знает, что это даты, и во всех запросах я ему тоже не даты подаю (от и до) а числа. И никакой конверции. А на клиенте на формах просто ставишь один из форматов даты-времени в поля и все.
Я ж подчеркнул - этот подход нужно применять ко всем полям базы, т.е. на базе DateTime не будет принципиально, следовательно не будет и конверсии, все работает напрямую.
...
Рейтинг: 0 / 0
SQL запросы и формат данных дата
    #32232152
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> блин, дурацкий mail.ru не шлет мне посты :((

Это не mail.ru, это просто на этом форуме оно так (не) работает.

> в том вся фишка, что никакого 1 нет, т.к. на SQL серваке - это числа! Он не знает, что это даты, и во всех запросах я ему тоже не даты подаю (от и до) а числа. И никакой конверции.

Но эти числа соответствуют датам по какой формуле? Например, 10 августа 2003 - это сколько?

> А на клиенте на формах просто ставишь один из форматов даты-времени в поля и все.

И он преобразует числа в даты по какой формуле?
...
Рейтинг: 0 / 0
SQL запросы и формат данных дата
    #32234765
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Владимир Саныч

Опять сорри за опоздание, но лучше поздно, чем никогда.

формула очень проста, со стороны VB/VBA я всегда пишу:

dim dt1 as DateTim
dim dt2 as Long

dt1=dt2
dt2=dt1

Для преобразования всяких текстов с датой:
CLng(CDate(str))

И вся формула :))

Я даже не задавался вопросом какая именно формула используется.
Но знаю как узнать исходную дату:
? Format(CDate(0), "dd.mm.yyyy")
...
Рейтинг: 0 / 0
SQL запросы и формат данных дата
    #32234935
bazaea
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Шкуренко Александр
Clng - округляет число. т.е. смена дня у вас будет происходить в полдень, а не в полночь.
...
Рейтинг: 0 / 0
SQL запросы и формат данных дата
    #32234937
am (a_mitin)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по поводу чем плохо:
попробуйте:
? cdate(clng(cdate("01.01.2003 08:30")))
? cdate(clng(cdate("01.01.2003 15:30")))

Если это не существенно, то в общем то и ничего страшного...
Хотя я лично всегда юзаю форматирование.
И выглядит это не так страшно:
SQLCmd = "SELECT * FROM any_table WHERE (my_date = " & Formatspdate(my_date.Value) & ")"
где Formatspdate - вот это:
http://am.rusimport.ru/msaccess/topic.aspx?ID=134
...
Рейтинг: 0 / 0
SQL запросы и формат данных дата
    #32235280
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм...
А от bazaea поступило самое ценное замечание.
Слона то мы все и не приметили
Но, конечно, все решаемо. Использовать какой-нибудь Int - и не будет округлений.

И все таки мне непонятно - почему никто не хочет переложить весь гемор с форматами данных на аксес? Неужели так сложно написать запрос с параметром? Передать туда дату - и пусть он (аксес) сам мучается.
...
Рейтинг: 0 / 0
SQL запросы и формат данных дата
    #32235554
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да уж, слона-то на вскидку и пропустил :)
дык, отлаженное приложение уже больше 2-х лет работает, ясен пень, что все эти мелочи с округлением учтены. А здесь чисто идеей поделился, реализация - ваша.

2 ЛП
для ADP проекта такая фигня была сделана. По требованию заказчика нужно было в формах дату и время разносить в отдельные поля, + довольно много логики оперирующей с датой и временем отдельно. Округлять требовалось только после ввода юзера перед сохранением в базе. А дальше использовалась дата как целое число, переводи в тип датавремя и обратно скок хошь раз, безо всяких опасений.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / SQL запросы и формат данных дата
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]