Как выбрать общее время из трех временных столбцов (SQL Server 2008) - PullRequest
2 голосов
/ 11 октября 2011

У меня есть таблица со столбцами time (0) типы данных:

Name   TimeOne          TimeTwo          TimeThree
------ ---------------- ---------------- ----------------
Sarah  06:45:00         03:30:00         NULL
John   06:45:00         NULL             NULL

Как сделать оператор SELECT, чтобы столбец «CalculatedTotal» был полным из TimeOne, TimeTwo и TimeThreeза строку?

Я хотел бы иметь запрос на выборку, подобный этому:

SELECT
    Name,
    TimeOne,
    TimeTwo,
    TimeThree,
    TimeOne + TimeTwo + TimeThree As CalculatedTotal
FROM 
    MyTable

Я хотел бы получить набор результатов, подобный этому:

Name   TimeOne          TimeTwo          TimeThree        CalculatedTotal
------ ---------------- ---------------- ---------------- ---------------
Sarah  06:45:00         03:30:00         NULL             10:15:00
John   06:45:00         NULL             NULL             06:45:00

Использование оператора «плюс» в операторе выбора дает ошибку:

Тип данных операнда время недопустимо для оператора добавления.

Ответы [ 3 ]

1 голос
/ 11 октября 2011

Вы можете определить количество секунд для каждого значения time, сложить их вместе и преобразовать обратно в time:

select TimeOne, TimeTwo, TimeThree,
       cast(dateadd(s, isnull(datediff(s, 0, TimeOne), 0) + isnull(datediff(s, 0, TimeTwo), 0) + isnull(datediff(s, 0, TimeThree), 0), 0) as time(0)) as CalculatedTotal
from MyTable
0 голосов
/ 15 июля 2014

Попробуйте приведенный ниже скрипт.

выберите конвертирование (время, CONVERT (дата-время, '00: 08: 00.000 ') + CONVERT (дата-время, '00: 07: 00.000'))

выберите преобразование (время, приведение ('00: 08: 00.000 'как дата-время) + приведение ('00: 07: 00.000' как время-дата)) как 'T'

0 голосов
/ 11 октября 2011

Полагаю, вы можете использовать функцию SUM ()

SELECT
    Name,
    TimeOne,
    TimeTwo,
    TimeThree,
    SUM(TimeOne+TimeTwo+TimeThree) As CalculatedTotal
FROM 
    MyTable

Но в равной степени вам может потребоваться сначала преобразовать каждую секунду в секунды, используя функцию SECOND (), а затем использовать SEC_TO_TIME () для результата.

Редактировать: я только что посмотрел руководство:

Агрегатные функции SUM () и AVG () не работают с временными ценности. (Они преобразуют значения в числа, которые теряют часть после первого нечислового символа.) Чтобы обойти эту проблему, Вы можете преобразовать в числовые единицы, выполнить агрегирование и преобразовать обратно во временное значение. Примеры:

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(time_col))) FROM tbl_name;
SELECT FROM_DAYS(SUM(TO_DAYS(date_col))) FROM tbl_name;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...