Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Сложение времени.  [new]
igor888
Guest
Доброе утро.

Вот пример?
select 
  cast(
    sum(d) 
  as datetime) 
from(
  select cast(cast('1900-01-01 00:45:00.000' as datetime) as float) d
  union all 
  select cast(cast('1900-01-01 01:10:00.000' as datetime) as float) d) 
a


вот что получится: 1900-01-01 01:54:59.997


Всегда применял такой подход, считало правильно до минут (секунды неважно). И случайно напоролся)))

Помогите разобраться в сложении часов и минут, должно получиться 1900-01-01 01:55:00.000
31 июл 15, 09:12    [17958372]     Ответить | Цитировать Сообщить модератору
 Re: Сложение времени.  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
1. Дискретность типа datetime 3 мс.
2. Почему не узать DATEADD() ?
31 июл 15, 09:26    [17958415]     Ответить | Цитировать Сообщить модератору
 Re: Сложение времени.  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
SELECT CAST(SUM(d) AS SMALLDATETIME)
FROM (
	SELECT CAST(CAST('1900-01-01 00:45:00.000' AS SMALLDATETIME) AS FLOAT) d
	UNION ALL
	SELECT CAST(CAST('1900-01-01 01:10:00.000' AS SMALLDATETIME) AS FLOAT) d
) a


можно, конечно, так... но вообще DATEADD будет явно по-приятнее...
31 июл 15, 09:35    [17958458]     Ответить | Цитировать Сообщить модератору
 Re: Сложение времени.  [new]
o-o
Guest
declare @t table (dt1 datetime, dt2 datetime);
insert into @t values 
('1900-01-01 00:45:00.000', '1900-01-01 01:10:00.000')

select DATEADD(ss, DATEDIFF(ss, '19000101', dt2), dt1)
from @t
---
1900-01-01 01:55:00.000
31 июл 15, 09:42    [17958489]     Ответить | Цитировать Сообщить модератору
 Re: Сложение времени.  [new]
igor888
Guest
o-o,

Вот только непонятно с DATEADD.
Как применить это в запросе?

Есть таблица там 10 строк, как сложить через DATEADD время всех строк?
31 июл 15, 10:02    [17958593]     Ответить | Цитировать Сообщить модератору
 Re: Сложение времени.  [new]
Glory
Member

Откуда:
Сообщений: 104760
igor888
Есть таблица там 10 строк,

А вы знаете, что будет, если сумма превысит 24 часа ?
31 июл 15, 10:04    [17958607]     Ответить | Цитировать Сообщить модератору
 Re: Сложение времени.  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
DECLARE @t TABLE (dt DATETIME)
INSERT INTO @t
VALUES ('1900-01-01 00:45:00.000'), ('1900-01-01 01:10:00.000')

SELECT DATEADD(ss, SUM(DATEDIFF(ss, '19000101', dt)), '19000101')
FROM @t
31 июл 15, 10:05    [17958615]     Ответить | Цитировать Сообщить модератору
 Re: Сложение времени.  [new]
o-o
Guest
declare @t table (dt datetime);
insert into @t values 
('1900-01-01 00:45:00.000'), ('1900-01-01 01:10:00.000')

select DATEADD(ss, sum(DATEDIFF(ss, '19000101', dt)), '19000101')
from @t
31 июл 15, 10:06    [17958619]     Ответить | Цитировать Сообщить модератору
 Re: Сложение времени.  [new]
o-o
Guest
сегодня мы с AlanDenton ответные близнецы-братья
31 июл 15, 10:08    [17958631]     Ответить | Цитировать Сообщить модератору
 Re: Сложение времени.  [new]
igor888
Guest
Glory,

Вы часто, пытаясь ответить, делаете из этого загадку?!

Отвечая на вопрос, обнулит, если предположить, что DATEADD возможно применить в запросе.

Тут писали ранее "можно, конечно, так... но вообще DATEADD будет явно по-приятнее...", поэтому мне хочется понять, это то что нужно мне или нет.
31 июл 15, 10:08    [17958633]     Ответить | Цитировать Сообщить модератору
 Re: Сложение времени.  [new]
Glory
Member

Откуда:
Сообщений: 104760
igor888
Отвечая на вопрос, обнулит,

Что обнулит ?

igor888
Вы часто, пытаясь ответить, делаете из этого загадку?!

Для вас является загадкой, как суммируются типы datetime
31 июл 15, 10:11    [17958650]     Ответить | Цитировать Сообщить модератору
 Re: Сложение времени.  [new]
igor888
Guest
Glory
igor888
Отвечая на вопрос, обнулит,

Что обнулит ?

igor888
Вы часто, пытаясь ответить, делаете из этого загадку?!

Для вас является загадкой, как суммируются типы datetime


А для Вас ответ... но, это как минимум странно
31 июл 15, 10:14    [17958667]     Ответить | Цитировать Сообщить модератору
 Re: Сложение времени.  [new]
o-o
Guest
igor888
Отвечая на вопрос, обнулит, если предположить, что DATEADD возможно применить в запросе.

ничего не обнулит, перевалит в другой день (дни)
можно подумать, что исходный запрос этого не делает.
все же то же самое, только в исходном варианте косяки с точностью
declare @t table (dt datetime);
insert into @t values 
('1900-01-01 23:45:00.000'), ('1900-01-01 01:10:00.000')

select DATEADD(ss, sum(DATEDIFF(ss, '19000101', dt)), '19000101')
from @t
----
1900-01-02 00:55:00.000

select 
  cast(
    sum(d) 
  as datetime) 
from(
  select cast(cast('1900-01-01 23:45:00.000' as datetime) as float) d
  union all 
  select cast(cast('1900-01-01 01:10:00.000' as datetime) as float) d) 
a
----
1900-01-02 00:54:59.997
31 июл 15, 10:14    [17958671]     Ответить | Цитировать Сообщить модератору
 Re: Сложение времени.  [new]
Glory
Member

Откуда:
Сообщений: 104760
igor888
А для Вас ответ... но, это как минимум странно

Не надо ерничать, если вы не знаете, что такое datetime и как с ним работать
31 июл 15, 10:16    [17958686]     Ответить | Цитировать Сообщить модератору
 Re: Сложение времени.  [new]
igor888
Guest
AlanDenton, о-о

Огромное спасибо! вопрос закрыт
31 июл 15, 10:17    [17958690]     Ответить | Цитировать Сообщить модератору
 Re: Сложение времени.  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
@igor888, Вам задали весьма хороший наводящий вопрос... если значение суммы превысит 24 часа, тогда у Вас будет явно не первый день месяца в итоге. Этот факт надо учитывать.

По поводу того, что хорошо. а что плохо. В Вашем случае постоянное приведение типов явно будет медленнее, чем вызов функции. Это конечно надо проверить на реальных данных. Но когда я последний раз проверял на 2012 - DATEADD / DATEDIFF показывали лучший перфоманс.

@o-o, верно подметили :)
31 июл 15, 10:20    [17958706]     Ответить | Цитировать Сообщить модератору
 Re: Сложение времени.  [new]
igor888
Guest
Glory
igor888
А для Вас ответ... но, это как минимум странно

Не надо ерничать, если вы не знаете, что такое datetime и как с ним работать


Если кто-то что-то не знает, то он задаёт вопрос на форуме
и странно получить ответ, от человека, который знает ответ на поставленный вопрос, некую загадку или ребус. Вот это уже странно!
31 июл 15, 10:25    [17958739]     Ответить | Цитировать Сообщить модератору
 Re: Сложение времени.  [new]
Glory
Member

Откуда:
Сообщений: 104760
igor888
Если кто-то что-то не знает, то он задаёт вопрос на форуме
и странно получить ответ, от человека, который знает ответ на поставленный вопрос, некую загадку или ребус. Вот это уже странно!

Т.е. вам обидно, что я знаю, а вы не знаете ?
Как мне вас жаль. Это ж вам на каждый вопрос нужно тему в форуме создавать.
31 июл 15, 10:28    [17958771]     Ответить | Цитировать Сообщить модератору
 Re: Сложение времени.  [new]
igor888
Guest
Glory
igor888
Если кто-то что-то не знает, то он задаёт вопрос на форуме
и странно получить ответ, от человека, который знает ответ на поставленный вопрос, некую загадку или ребус. Вот это уже странно!

Т.е. вам обидно, что я знаю, а вы не знаете ?
Как мне вас жаль. Это ж вам на каждый вопрос нужно тему в форуме создавать.


Хм, "Т.е. вам обидно, что я знаю, а вы не знаете ?", где интересно я это написал. И жалейте лучше свои нервы, а не форумчан!

"Это ж вам на каждый вопрос нужно тему в форуме создавать" - есть другие варианты задать вопрос на форуме?! или нужно дождаться когда их будет 2 или 3?!
31 июл 15, 10:36    [17958827]     Ответить | Цитировать Сообщить модератору
 Re: Сложение времени.  [new]
Glory
Member

Откуда:
Сообщений: 104760
igor888
Хм, "Т.е. вам обидно, что я знаю, а вы не знаете ?", где интересно я это написал.

"Отвечая на вопрос, обнулит,"

igor888
И жалейте лучше свои нервы, а не форумчан!

Идите, доктор, перечитайте что ли конспекты

igor888
"Это ж вам на каждый вопрос нужно тему в форуме создавать" - есть другие варианты задать вопрос на форуме?! или нужно дождаться когда их будет 2 или 3?!

начинайте оформоение вопроса отсюда https://msdn.microsoft.com/en-us/library/bb545450.aspx
31 июл 15, 10:38    [17958843]     Ответить | Цитировать Сообщить модератору
 Re: Сложение времени.  [new]
igor888
Guest
"начинайте оформоение вопроса отсюда https://msdn.microsoft.com/en-us/library/bb545450.aspx"

Glory, у Вас хорошая идея, на любой вопрос на форуме отвечать этим! Но можно предположить, что со временем Вас будут считать ботом.
31 июл 15, 10:54    [17958939]     Ответить | Цитировать Сообщить модератору
 Re: Сложение времени.  [new]
Glory
Member

Откуда:
Сообщений: 104760
igor888
Но можно предположить, что со временем Вас будут считать ботом.

Сказал бот, который не открывал хелп ни разу
Может хоть это прочитаете http://citforum.ru/howto/smart-questions-ru.shtml ?
31 июл 15, 10:57    [17958964]     Ответить | Цитировать Сообщить модератору
 Re: Сложение времени.  [new]
o-o
Guest
+ о пророчествах
igor888
"Но можно предположить, что со временем Вас будут считать ботом.

щас темку прикроют, но может успею поделиться:
мне 3 раза пришлось перечитать, т.к. показалось, что написано "со временем Вас будут считать богом"
31 июл 15, 10:58    [17958973]     Ответить | Цитировать Сообщить модератору
 Re: Сложение времени.  [new]
igor888
Guest
При всём уважении к Вам, Glory, начали ерничать Вы, причём с самого начала!
31 июл 15, 11:03    [17959007]     Ответить | Цитировать Сообщить модератору
 Re: Сложение времени.  [new]
Glory
Member

Откуда:
Сообщений: 104760
igor888
При всём уважении к Вам, Glory, начали ерничать Вы, причём с самого начала!

Для бота вы слишком близко принимаете свои неудачи в ответах на элементарные вопросы.
Идите уже "ботайте" в других местах
31 июл 15, 11:06    [17959027]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить