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

Откуда:
Сообщений: 46
Добрый день.

Есть следующая задача, которую нужно реализовать в MS T-SQL.

В таблице есть два столбца с датами и временем:

1. Необходимо посчитать разницу (по всем строкам в столбцах), между "Стартовым временем" и "Конечным временем" (Скрин_1), и записать рядом в столбец данную разницу.

2. В результатах разницы, между "Стартовым временем" и "Конечным временем", отсечь год/месяц/день и оставить только время.

Буду благодарен за помощь/подсказки/ссылки и т.д.

К сообщению приложен файл. Размер - 9Kb
23 июл 19, 18:33    [21932991]     Ответить | Цитировать Сообщить модератору
 Re: Манипуляция с датой и временем  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7403
Caxa_ASS,

разница может быть определена счетными единицами времени, календарная дата не является счетной единицей.
Т.е. разница дат не может быть датой.
23 июл 19, 18:35    [21932995]     Ответить | Цитировать Сообщить модератору
 Re: Манипуляция с датой и временем  [new]
msLex
Member

Откуда:
Сообщений: 7734
Caxa_ASS
Добрый день.

Есть следующая задача, которую нужно реализовать в MS T-SQL.

В таблице есть два столбца с датами и временем:

1. Необходимо посчитать разницу (по всем строкам в столбцах), между "Стартовым временем" и "Конечным временем" (Скрин_1), и записать рядом в столбец данную разницу.

2. В результатах разницы, между "Стартовым временем" и "Конечным временем", отсечь год/месяц/день и оставить только время.

Буду благодарен за помощь/подсказки/ссылки и т.д.

Картинка с другого сайта.



вот вам в секундах. в "часы:минут:секунды" сами переведите
;with x as (
	select 
		start_date		= cast('2019-01-01 12:45:00' as datetime2)
		, finish_date	= cast('2019-01-01 13:00:00' as datetime2)
	union all
	select 
		start_date		= cast('2019-01-01 12:45:00' as datetime2)
		, finish_date	= cast('2019-01-05 13:00:00' as datetime2)
	union all
	select 
		start_date		= cast('2019-01-01 12:45:00' as datetime2)
		, finish_date	= cast('2019-01-05 12:00:00' as datetime2)
)




select 
	diff = case when d >= 0 then d else d + 60*60*24 end
from (  
	select 
		d = datediff(ss,  dateadd(dd, datediff (dd, start_date, finish_date), start_date), finish_date)
	from x 
) d
23 июл 19, 19:07    [21933032]     Ответить | Цитировать Сообщить модератору
 Re: Манипуляция с датой и временем  [new]
Caxa_ASS
Member

Откуда:
Сообщений: 46
Для решения воспользовался:

https://docs.microsoft.com/ru-ru/sql/t-sql/functions/datediff-transact-sql?view=sql-server-2017

SELECT DATEDIFF ([minute], 'название_столбца', 'название_столбца');

Всем спасибо!
24 июл 19, 12:54    [21933481]     Ответить | Цитировать Сообщить модератору
 Re: Манипуляция с датой и временем  [new]
msLex
Member

Откуда:
Сообщений: 7734
Caxa_ASS
Для решения воспользовался:

https://docs.microsoft.com/ru-ru/sql/t-sql/functions/datediff-transact-sql?view=sql-server-2017

SELECT DATEDIFF ([minute], 'название_столбца', 'название_столбца');

Всем спасибо!


а как же

автор
В результатах разницы, между "Стартовым временем" и "Конечным временем", отсечь год/месяц/день и оставить только время.


Если у вас между стартом и финишем больше суток пройдет, каков будет результат?
24 июл 19, 13:05    [21933497]     Ответить | Цитировать Сообщить модератору
 Re: Манипуляция с датой и временем  [new]
Caxa_ASS
Member

Откуда:
Сообщений: 46
msLex,
SELECT DATEDIFF(minute, '2003-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');

согласно селекта выше прошло 2 года, результат 1052641 минут.

или я Вас не понял!?
24 июл 19, 15:23    [21933645]     Ответить | Цитировать Сообщить модератору
 Re: Манипуляция с датой и временем  [new]
msLex
Member

Откуда:
Сообщений: 7734
Caxa_ASS
msLex,
SELECT DATEDIFF(minute, '2003-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');

согласно селекта выше прошло 2 года, результат 1052641 минут.

или я Вас не понял!?


вы же писали, что нужно вот эти "2 года" нужно отбросить.
24 июл 19, 15:29    [21933653]     Ответить | Цитировать Сообщить модератору
 Re: Манипуляция с датой и временем  [new]
Caxa_ASS
Member

Откуда:
Сообщений: 46
msLex,

Все отброшено, в чем проблема???

К сообщению приложен файл. Размер - 13Kb
24 июл 19, 15:36    [21933661]     Ответить | Цитировать Сообщить модератору
 Re: Манипуляция с датой и временем  [new]
msLex
Member

Откуда:
Сообщений: 7734
Caxa_ASS
msLex,

Все отброшено, в чем проблема???

Картинка с другого сайта.


а что в вашем понимании
Caxa_ASS
отсечь год/месяц/день

?
24 июл 19, 15:38    [21933664]     Ответить | Цитировать Сообщить модератору
 Re: Манипуляция с датой и временем  [new]
Caxa_ASS
Member

Откуда:
Сообщений: 46
msLex,

1) Убрать перед минутами год/месяц/день и оставить только время, я это писал в самом 1-м сообщении.
2) Выводить разницу в минутах (целое число) без даты, месяца, дня.

Надеюсь предельно, + в скришоте так же обвел, что мне нужно было.

Вопрос решен, еще раз спасибо за внимание!
24 июл 19, 15:43    [21933667]     Ответить | Цитировать Сообщить модератору
 Re: Манипуляция с датой и временем  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7403
Caxa_ASS,

Вы покажете одну минуту, если разница времени будет сутки плюс минута. Так и задумано?
24 июл 19, 16:53    [21933731]     Ответить | Цитировать Сообщить модератору
 Re: Манипуляция с датой и временем  [new]
PizzaPizza
Member

Откуда:
Сообщений: 309
Caxa_ASS

1. Необходимо посчитать разницу (по всем строкам в столбцах), между "Стартовым временем" и "Конечным временем" (Скрин_1), и записать рядом в столбец данную разницу.

2. В результатах разницы, между "Стартовым временем" и "Конечным временем", отсечь год/месяц/день и оставить только время.


DATEDIFF выполняет только первый пункт...
К вопросу о важности понимания и правильного формулирования задачи для ее решения.
24 июл 19, 17:42    [21933773]     Ответить | Цитировать Сообщить модератору
 Re: Манипуляция с датой и временем  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30821
Владислав Колосов
Caxa_ASS,

Вы покажете одну минуту, если разница времени будет сутки плюс минута. Так и задумано?
Ну да, алгоритм же описан предельно однозначно.

Хотя задача странная.
25 июл 19, 07:02    [21933997]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить