Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Связь по datetime  [new]
vah
Member

Откуда:
Сообщений: 2649
Скажите пожалуйста, корректно ли делать join по полям datetime?
25 июн 09, 17:02    [7344341]     Ответить | Цитировать Сообщить модератору
 Re: Связь по datetime  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36808
А чем тип datetime должен в это отношении быть хуже/лучше других типов?
25 июн 09, 17:13    [7344440]     Ответить | Цитировать Сообщить модератору
 Re: Связь по datetime  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
все зависит от задачи
если, например, нужно нарастающий итог по дате/времени,
то одно из первых напрашивающихся решений - join таблицы на саму себя по условию t2.date_field <= t1.date_field
25 июн 09, 17:13    [7344444]     Ответить | Цитировать Сообщить модератору
 Re: Связь по datetime  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
Гавриленко Сергей Алексеевич
А чем тип datetime должен в это отношении быть хуже/лучше других типов?
Хотя это и оффтопик, но помню проблему при связывании по полю float (А datetime в некот. роде тоже float). Так вот были случаи, когда связь не происходила, хотя значение в полях было одно и то же(были вписаны из одного источника без преобразований). Почему-то при связке поля отличались на самый младший бит :)
По датам связывает хорошо. Особенно без времени :)
25 июн 09, 18:35    [7344855]     Ответить | Цитировать Сообщить модератору
 Re: Связь по datetime  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36808
LSV
Гавриленко Сергей Алексеевич
А чем тип datetime должен в это отношении быть хуже/лучше других типов?
Хотя это и оффтопик, но помню проблему при связывании по полю float (А datetime в некот. роде тоже float). Так вот были случаи, когда связь не происходила, хотя значение в полях было одно и то же(были вписаны из одного источника без преобразований). Почему-то при связке поля отличались на самый младший бит :)
По датам связывает хорошо. Особенно без времени :)
Тут не стоит путать точный и неточный типы данных.
25 июн 09, 18:42    [7344879]     Ответить | Цитировать Сообщить модератору
 Re: Связь по datetime  [new]
aleks2
Guest
Гавриленко Сергей Алексеевич
LSV
Гавриленко Сергей Алексеевич
А чем тип datetime должен в это отношении быть хуже/лучше других типов?
Хотя это и оффтопик, но помню проблему при связывании по полю float (А datetime в некот. роде тоже float). Так вот были случаи, когда связь не происходила, хотя значение в полях было одно и то же(были вписаны из одного источника без преобразований). Почему-то при связке поля отличались на самый младший бит :)
По датам связывает хорошо. Особенно без времени :)
Тут не стоит путать точный и неточный типы данных.

Хе-хе... как мне нравится этот БРЕД!

float - 8 bytes
datetime - requires 8 bytes of storage per value

Уважаемый, поясните как может более точными или менее точными данные, которые занимают фиксированное число бит в памяти компутера? Там шо, биты скачут с месту на место?
26 июн 09, 05:55    [7345854]     Ответить | Цитировать Сообщить модератору
 Re: Связь по datetime  [new]
проходящий.
Guest
aleks2
Гавриленко Сергей Алексеевич
Тут не стоит путать точный и неточный типы данных.

Хе-хе... как мне нравится этот БРЕД!

float - 8 bytes
datetime - requires 8 bytes of storage per value

Уважаемый, поясните как может более точными или менее точными данные, которые занимают фиксированное число бит в памяти компутера? Там шо, биты скачут с месту на место?
Кто тут написал бред - большой вопрос. Но кому-то точно надо почитать БОЛ да и некоторые основы вычислительной техники с основами математики вспомнить.
26 июн 09, 09:43    [7346161]     Ответить | Цитировать Сообщить модератору
 Re: Связь по datetime  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
aleks2
Гавриленко Сергей Алексеевич
LSV
Гавриленко Сергей Алексеевич
А чем тип datetime должен в это отношении быть хуже/лучше других типов?
Хотя это и оффтопик, но помню проблему при связывании по полю float (А datetime в некот. роде тоже float). Так вот были случаи, когда связь не происходила, хотя значение в полях было одно и то же(были вписаны из одного источника без преобразований). Почему-то при связке поля отличались на самый младший бит :)
По датам связывает хорошо. Особенно без времени :)
Тут не стоит путать точный и неточный типы данных.

Хе-хе... как мне нравится этот БРЕД!

float - 8 bytes
datetime - requires 8 bytes of storage per value

Уважаемый, поясните как может более точными или менее точными данные, которые занимают фиксированное число бит в памяти компутера? Там шо, биты скачут с месту на место?
Смотря как эти сравниваемые значения были получены.
Иногда очевидно, что они должны быть равны, но из-за неточного результата различных функций это оказывается неверным.
В общем случае вероятность точного совпадения двух расчитанных значений FLOAT не так уж и велика.
Например, вот этот SELECT ничего не возвращает (по крайней мере у меня ничего не вернул):
SET NOCOUNT ON;
DECLARE @F1 FLOAT, @F2 FLOAT;
SELECT @F1=LOG(SQRT(PI())), @F2=0.5*LOG(PI());
SELECT @F1[@F1], @F2[@F2]; /*Вроде, равны?!*/
SELECT CAST(@F1 AS DEC(20,20))[@F1], CAST(@F2 AS DEC(20,20))[@F2]; /*Ан нет! И это нетрудно видеть*/
SELECT '@F1=@F2' WHERE @F1=@F2; /*Ничего не возвращает, естесственно*/
26 июн 09, 09:54    [7346206]     Ответить | Цитировать Сообщить модератору
 Re: Связь по datetime  [new]
aleks2
Guest
iap
Смотря как эти сравниваемые значения были получены.
Иногда очевидно, что они должны быть равны, но из-за неточного результата различных функций это оказывается неверным.
В общем случае вероятность точного совпадения двух расчитанных значений FLOAT не так уж и велика.
Например, вот этот SELECT ничего не возвращает (по крайней мере у меня ничего не вернул):
SET NOCOUNT ON;
DECLARE @F1 FLOAT, @F2 FLOAT;
SELECT @F1=LOG(SQRT(PI())), @F2=0.5*LOG(PI());
SELECT @F1[@F1], @F2[@F2]; /*Вроде, равны?!*/
SELECT CAST(@F1 AS DEC(20,20))[@F1], CAST(@F2 AS DEC(20,20))[@F2]; /*Ан нет! И это нетрудно видеть*/
SELECT '@F1=@F2' WHERE @F1=@F2; /*Ничего не возвращает, естесственно*/


Ежели функция или иное вычисление возвращает РАЗНЫЕ значения для некоего типа данных, дык теперь такой тип данных становится НЕТОЧНЫМ? Мне, канешно, начхать на широкораспространенные заблуждения, однако особенности ВЫЧИСЛЕНИЙ с округлением, которые массы не желают осознавать, не следует выдавать за НЕТОЧНОСТЬ типа данных. Float может принимать ТОЧНО 2^64 различных значений и каждое такое значение ТОЧНОЕ, т.е. равно только самому себе.
26 июн 09, 11:07    [7346675]     Ответить | Цитировать Сообщить модератору
 Re: Связь по datetime  [new]
aleks2
Guest
Объявим INT неточным типом данных.
вроде должны быть равны
select (10+1)/11 as [X], (10/11+1/11) as Y
ан нет...
26 июн 09, 11:12    [7346707]     Ответить | Цитировать Сообщить модератору
 Re: Связь по datetime  [new]
Glory
Member

Откуда:
Сообщений: 104760
aleks2
Объявим INT неточным типом данных.
вроде должны быть равны
select (10+1)/11 as [X], (10/11+1/11) as Y
ан нет...

Это неправильный пример. Потому что 10/11 и 1/11 сервер усекает результат.
26 июн 09, 11:14    [7346718]     Ответить | Цитировать Сообщить модератору
 Re: Связь по datetime  [new]
Senya_L
Member

Откуда: Москва
Сообщений: 5381
aleks2
Ежели функция или иное вычисление возвращает РАЗНЫЕ значения для некоего типа данных, дык теперь такой тип данных становится НЕТОЧНЫМ? Мне, канешно, начхать на широкораспространенные заблуждения, однако особенности ВЫЧИСЛЕНИЙ с округлением, которые массы не желают осознавать, не следует выдавать за НЕТОЧНОСТЬ типа данных. Float может принимать ТОЧНО 2^64 различных значений и каждое такое значение ТОЧНОЕ, т.е. равно только самому себе.
Данные сервер получает с клиента, а там с float могут произойти что угодно. Да, в SQL-сервер DATETIME во внутреннем представлении - это два целых числа, но, например в Delphi этот тип совпадает с float. При тестировании часто сталкивался с необходимостью округлять до некой точности числа при сравнении, так что и с датами может происходить нечто подобное.
26 июн 09, 11:16    [7346734]     Ответить | Цитировать Сообщить модератору
 Re: Связь по datetime  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31194
aleks2
Ежели функция или иное вычисление возвращает РАЗНЫЕ значения для некоего типа данных, дык теперь такой тип данных становится НЕТОЧНЫМ? Мне, канешно, начхать на широкораспространенные заблуждения, однако особенности ВЫЧИСЛЕНИЙ с округлением, которые массы не желают осознавать, не следует выдавать за НЕТОЧНОСТЬ типа данных. Float может принимать ТОЧНО 2^64 различных значений и каждое такое значение ТОЧНОЕ, т.е. равно только самому себе.
Это всё правильно, просто такой устоявшийся термин - "неточный тип данных".

Конечно, подразумеваются операции, а не сам тип. А без операций ведь работы с данными не бывает, разве что кроме простого копирования внутри сервера (типа операции insert ... select ... from ... с простым перечислением полей)
26 июн 09, 11:49    [7346973]     Ответить | Цитировать Сообщить модератору
 Re: Связь по datetime  [new]
aleks2
Guest
Glory
aleks2
Объявим INT неточным типом данных.
вроде должны быть равны
select (10+1)/11 as [X], (10/11+1/11) as Y
ан нет...

Это неправильный пример. Потому что 10/11 и 1/11 сервер усекает результат.

С таким же успехом я могу объявить "неправильным" пример IAP.
Это и есть ВЫЧИСЛЕНИЕ с ОКРУГЛЕНИЕМ.
26 июн 09, 12:05    [7347078]     Ответить | Цитировать Сообщить модератору
 Re: Связь по datetime  [new]
Glory
Member

Откуда:
Сообщений: 104760
aleks2
Glory
aleks2
Объявим INT неточным типом данных.
вроде должны быть равны
select (10+1)/11 as [X], (10/11+1/11) as Y
ан нет...

Это неправильный пример. Потому что 10/11 и 1/11 сервер усекает результат.

С таким же успехом я могу объявить "неправильным" пример IAP.
Это и есть ВЫЧИСЛЕНИЕ с ОКРУГЛЕНИЕМ.

Ну так мы про вычисления и говорим. Откуда по-вашеу возьмутся значения для полей то ?
26 июн 09, 12:07    [7347096]     Ответить | Цитировать Сообщить модератору
 Re: Связь по datetime  [new]
aleks2
Guest
Glory
aleks2
Glory
aleks2
Объявим INT неточным типом данных.
вроде должны быть равны
select (10+1)/11 as [X], (10/11+1/11) as Y
ан нет...

Это неправильный пример. Потому что 10/11 и 1/11 сервер усекает результат.

С таким же успехом я могу объявить "неправильным" пример IAP.
Это и есть ВЫЧИСЛЕНИЕ с ОКРУГЛЕНИЕМ.

Ну так мы про вычисления и говорим. Откуда по-вашеу возьмутся значения для полей то ?

Ну дык признаем INT "неточным" типом данных и угомонимся?
26 июн 09, 12:14    [7347159]     Ответить | Цитировать Сообщить модератору
 Re: Связь по datetime  [new]
Glory
Member

Откуда:
Сообщений: 104760
aleks2
Glory
aleks2
Glory
aleks2
Объявим INT неточным типом данных.
вроде должны быть равны
select (10+1)/11 as [X], (10/11+1/11) as Y
ан нет...

Это неправильный пример. Потому что 10/11 и 1/11 сервер усекает результат.

С таким же успехом я могу объявить "неправильным" пример IAP.
Это и есть ВЫЧИСЛЕНИЕ с ОКРУГЛЕНИЕМ.

Ну так мы про вычисления и говорим. Откуда по-вашеу возьмутся значения для полей то ?

Ну дык признаем INT "неточным" типом данных и угомонимся?

Признаем операцию деления int на int неточным вычислением и угомонимся
26 июн 09, 12:19    [7347201]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить