Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Caxa_ASS Member Откуда: Сообщений: 77 |
Добрый день. Есть следующая задача, которую нужно реализовать в MS T-SQL. В таблице есть два столбца с датами и временем: 1. Необходимо посчитать разницу (по всем строкам в столбцах), между "Стартовым временем" и "Конечным временем" (Скрин_1), и записать рядом в столбец данную разницу. 2. В результатах разницы, между "Стартовым временем" и "Конечным временем", отсечь год/месяц/день и оставить только время. Буду благодарен за помощь/подсказки/ссылки и т.д. К сообщению приложен файл. Размер - 9Kb |
23 июл 19, 18:33 [21932991] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8335 |
Caxa_ASS, разница может быть определена счетными единицами времени, календарная дата не является счетной единицей. Т.е. разница дат не может быть датой. |
23 июл 19, 18:35 [21932995] Ответить | Цитировать Сообщить модератору |
msLex Member Откуда: Сообщений: 8727 |
вот вам в секундах. в "часы:минут:секунды" сами переведите ;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] Ответить | Цитировать Сообщить модератору |
Caxa_ASS Member Откуда: Сообщений: 77 |
Для решения воспользовался: 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] Ответить | Цитировать Сообщить модератору |
msLex Member Откуда: Сообщений: 8727 |
а как же
Если у вас между стартом и финишем больше суток пройдет, каков будет результат? |
||||
24 июл 19, 13:05 [21933497] Ответить | Цитировать Сообщить модератору |
Caxa_ASS Member Откуда: Сообщений: 77 |
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] Ответить | Цитировать Сообщить модератору |
msLex Member Откуда: Сообщений: 8727 |
вы же писали, что нужно вот эти "2 года" нужно отбросить. |
||
24 июл 19, 15:29 [21933653] Ответить | Цитировать Сообщить модератору |
Caxa_ASS Member Откуда: Сообщений: 77 |
msLex, Все отброшено, в чем проблема??? К сообщению приложен файл. Размер - 13Kb |
24 июл 19, 15:36 [21933661] Ответить | Цитировать Сообщить модератору |
msLex Member Откуда: Сообщений: 8727 |
а что в вашем понимании
? |
||||
24 июл 19, 15:38 [21933664] Ответить | Цитировать Сообщить модератору |
Caxa_ASS Member Откуда: Сообщений: 77 |
msLex, 1) Убрать перед минутами год/месяц/день и оставить только время, я это писал в самом 1-м сообщении. 2) Выводить разницу в минутах (целое число) без даты, месяца, дня. Надеюсь предельно, + в скришоте так же обвел, что мне нужно было. Вопрос решен, еще раз спасибо за внимание! |
24 июл 19, 15:43 [21933667] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8335 |
Caxa_ASS, Вы покажете одну минуту, если разница времени будет сутки плюс минута. Так и задумано? |
24 июл 19, 16:53 [21933731] Ответить | Цитировать Сообщить модератору |
PizzaPizza Member Откуда: Сообщений: 416 |
DATEDIFF выполняет только первый пункт... К вопросу о важности понимания и правильного формулирования задачи для ее решения. |
||
24 июл 19, 17:42 [21933773] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
Хотя задача странная. |
||
25 июл 19, 07:02 [21933997] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |