|
|
|
SQL запросы и формат данных дата
|
|||
|---|---|---|---|
|
#18+
Люди, люди, человеки! (с) х/ф "Гараж" Объясните мне пожалуйста, что плохого в том что я использую 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 секунды). Посчитал и не выходит. Или совсем математику забыл :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2003, 15:33 |
|
||
|
SQL запросы и формат данных дата
|
|||
|---|---|---|---|
|
#18+
В дробной части даты лежит дробная часть от целой части. :^) То есть от дня. А перевод в лонг опасен вот чем. (Не знаю, что имел в виду ЛП, но у меня есть по крайней мере одно соображение.) Целая часть - это количество дней от некой даты "сотворения компьютера" до данной даты. Но эта дата "сотворения компьютера" на SQL сервере и в Аксессе разная, она отличается на 1 день. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2003, 15:40 |
|
||
|
SQL запросы и формат данных дата
|
|||
|---|---|---|---|
|
#18+
>В дробной части даты лежит дробная часть от целой части. :^) То есть от дня. Я вроде так и считал часы * 3600 + минуты * 60 + секунды. > Но эта дата "сотворения компьютера" на SQL сервере и в Аксессе разная, она отличается на 1 день. Спасибо. Есть над чем подумать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2003, 15:47 |
|
||
|
SQL запросы и формат данных дата
|
|||
|---|---|---|---|
|
#18+
> часы * 3600 + минуты * 60 + секунды А теперь это все делим на 60*60*24 и записываем как десятичную дробь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2003, 15:51 |
|
||
|
SQL запросы и формат данных дата
|
|||
|---|---|---|---|
|
#18+
Я?? В чем то упрекнул?? Да я бы сразу нах послал Дата - число с плавающей точкой. Причем еще и формат разный на разных системах (как написал Саныч) Ты его сравниваешь с целым. Ну и хто ты после этого? Я так вообще стараюсь динамически не формировать SQL-запросы с критериями. Только если припрет. А так - запрос с параметрами сделал, параметр типа дата/время, в коде в этот параметр запихал переменную типа Date, и пусть у аксеса голова болит о преобразовании типов, формате даты, региональных настройках и прочей пофуистике. Не мое дело это знать, мое дело это не знать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2003, 15:55 |
|
||
|
SQL запросы и формат данных дата
|
|||
|---|---|---|---|
|
#18+
2 Владимир Саныч Спасибо огромное 2 ЛП > Ты его сравниваешь с целым. Ну и хто ты после этого? А ты думаешь Jet что делает когда встречает # ? Где использовал везде работало, по крайне мере где не использовалось время Приведи пример кода не заработает, ато я бюсь и не получается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2003, 16:01 |
|
||
|
SQL запросы и формат данных дата
|
|||
|---|---|---|---|
|
#18+
Зачем пример кода? Я тебе приведу пример данных Забей в таблицу помимо даты еще и время (наплевав на мифический формат отображения даты). Попробуй своим способом эту запись найти. GO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2003, 16:04 |
|
||
|
SQL запросы и формат данных дата
|
|||
|---|---|---|---|
|
#18+
Дык, а зачем тогда вообще хранить DateTime? Храни целое число. Я в одном из проектов так и делал, для экономии места. int32 вместо DateTime. Действительно, дата, переведенная в целое/float отличается на 1 день в варианте Access и MS SQL, так что такое подход нужно применять или ко всем полям базы, или не применять вообще. (ечли только не увлекаемя садомазохизмом). У меня сервак вообще понятия не имел, что это дата или время - и то и другое хранил отдельно или вместе по мере надобности, как целое, float или double для Date, Time и DateTime полей соответственно, т.е. он с ними работал прочто как с числами, (иногда только Date+Time склеивал или расклеивал в запросах и процедурах, или извлекал требуемую часть, но ВСЕГДА работал именно как с числами). А вот на клиенте программа "знала" что это именно поля даты, и все ok. Успехов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2003, 16:15 |
|
||
|
SQL запросы и формат данных дата
|
|||
|---|---|---|---|
|
#18+
Хм.. Хранить как число... Тож вариант. Только придется на клиенте каждый раз это преобразовывать из числа в дату... И время может быть больше одного дня (если условий на значение не накладывать)... Все решаемо конечно. В принципе идея хорошая. Если преобразований туда-сюда не пугаться. И не забыть про отличия на 1 в момент переноса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2003, 16:22 |
|
||
|
SQL запросы и формат данных дата
|
|||
|---|---|---|---|
|
#18+
2 vdimas Для SQL Server я так и делаю, гемороя меньше. Я для mdb в самый раз. 2 ЛП >Забей в таблицу помимо даты еще и время (наплевав на мифический формат отображения даты). >Попробуй своим способом эту запись найти. я и не спорю что со временем не работает, но для времени я сделаю преобразование в дробное ( не с помощью Cdbl :-)). В основном используется либо дата либо время. А неявные преобразования не есть хорошо. Нужно чтобы они становились явными. Тогда жизнь покажется медом! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2003, 16:38 |
|
||
|
SQL запросы и формат данных дата
|
|||
|---|---|---|---|
|
#18+
я и не спорю что со временем не работает ну а я не пишу программы, которые иногда работают, а иногда нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2003, 16:41 |
|
||
|
SQL запросы и формат данных дата
|
|||
|---|---|---|---|
|
#18+
блин, дурацкий mail.ru не шлет мне посты :(( c опозданием: ЛП И не забыть про отличия на 1 в момент переноса в том вся фишка, что никакого 1 нет, т.к. на SQL серваке - это числа! Он не знает, что это даты, и во всех запросах я ему тоже не даты подаю (от и до) а числа. И никакой конверции. А на клиенте на формах просто ставишь один из форматов даты-времени в поля и все. Я ж подчеркнул - этот подход нужно применять ко всем полям базы, т.е. на базе DateTime не будет принципиально, следовательно не будет и конверсии, все работает напрямую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2003, 15:40 |
|
||
|
SQL запросы и формат данных дата
|
|||
|---|---|---|---|
|
#18+
> блин, дурацкий mail.ru не шлет мне посты :(( Это не mail.ru, это просто на этом форуме оно так (не) работает. > в том вся фишка, что никакого 1 нет, т.к. на SQL серваке - это числа! Он не знает, что это даты, и во всех запросах я ему тоже не даты подаю (от и до) а числа. И никакой конверции. Но эти числа соответствуют датам по какой формуле? Например, 10 августа 2003 - это сколько? > А на клиенте на формах просто ставишь один из форматов даты-времени в поля и все. И он преобразует числа в даты по какой формуле? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2003, 15:44 |
|
||
|
SQL запросы и формат данных дата
|
|||
|---|---|---|---|
|
#18+
2 Владимир Саныч Опять сорри за опоздание, но лучше поздно, чем никогда. формула очень проста, со стороны VB/VBA я всегда пишу: dim dt1 as DateTim dim dt2 as Long dt1=dt2 dt2=dt1 Для преобразования всяких текстов с датой: CLng(CDate(str)) И вся формула :)) Я даже не задавался вопросом какая именно формула используется. Но знаю как узнать исходную дату: ? Format(CDate(0), "dd.mm.yyyy") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2003, 00:29 |
|
||
|
SQL запросы и формат данных дата
|
|||
|---|---|---|---|
|
#18+
To Шкуренко Александр Clng - округляет число. т.е. смена дня у вас будет происходить в полдень, а не в полночь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2003, 09:56 |
|
||
|
SQL запросы и формат данных дата
|
|||
|---|---|---|---|
|
#18+
по поводу чем плохо: попробуйте: ? 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2003, 09:58 |
|
||
|
SQL запросы и формат данных дата
|
|||
|---|---|---|---|
|
#18+
Хм... А от bazaea поступило самое ценное замечание. Слона то мы все и не приметили Но, конечно, все решаемо. Использовать какой-нибудь Int - и не будет округлений. И все таки мне непонятно - почему никто не хочет переложить весь гемор с форматами данных на аксес? Неужели так сложно написать запрос с параметром? Передать туда дату - и пусть он (аксес) сам мучается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2003, 13:12 |
|
||
|
SQL запросы и формат данных дата
|
|||
|---|---|---|---|
|
#18+
да уж, слона-то на вскидку и пропустил :) дык, отлаженное приложение уже больше 2-х лет работает, ясен пень, что все эти мелочи с округлением учтены. А здесь чисто идеей поделился, реализация - ваша. 2 ЛП для ADP проекта такая фигня была сделана. По требованию заказчика нужно было в формах дату и время разносить в отдельные поля, + довольно много логики оперирующей с датой и временем отдельно. Округлять требовалось только после ввода юзера перед сохранением в базе. А дальше использовалась дата как целое число, переводи в тип датавремя и обратно скок хошь раз, безо всяких опасений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2003, 15:57 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32228965&tid=1679934]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
77ms |
get tp. blocked users: |
2ms |
| others: | 201ms |
| total: | 376ms |

| 0 / 0 |
