Как добавить два значения времени, хранящиеся в десятичном виде на SQL сервере - PullRequest
0 голосов
/ 06 марта 2020

Мне нужно добавить два столбца, в которых хранятся значения времени в качестве десятичного числа: 1.) 8.30 + 0.32 = 9.02 (вывод должен быть 9.03, а не 8.62)

Приведенный выше пример работает нормально и является действительным вывод ниже SQL.

Я написал ниже SQL, который в основном работает нормально, но я нахожу несколько случаев, когда сложение не является правильным

Пример: 3,57 + 5,25 = 18,44

SELECT
case when B.Column_B is null then A.Column_A
when B.Column_B is not null then 
replace(CONVERT(varchar(5), 
DATEADD(ss,(SUM((DATEPART(hh, replace(isnull(a.Column_A,0.00),'.',':'))*3600) + (DATEPART(mi,replace(isnull(a.Column_A,0.00),'.',':'))*60)) +
SUM((DATEPART(hh, replace(isnull(b.Column_B,0.00),'.',':'))*3600) + (DATEPART(mi,replace(isnull(b.Column_B,0.00),'.',':'))*60))),0),108) ,':','.')
End as "Total_Hours" 

Я не могу найти, где это идет не так в вышеупомянутом случае. Здесь что-то не так или есть лучший способ справиться с этим дополнением

Ответы [ 2 ]

2 голосов
/ 06 марта 2020

Попробуйте:

DECLARE @Value01 DECIMAL(9,2) = 8.30
       ,@value02 DECIMAL(9,2) = 0.32;

SELECT CONCAT 
       (
            (DATEDIFF(MINUTE, '0:00:00', CAST(REPLACE(@Value01, '.', ':') AS TIME)) +  DATEDIFF(MINUTE, '0:00:00', CAST(REPLACE(@value02, '.', ':') AS TIME))) / 60
           ,'.'
           ,RIGHT((DATEDIFF(MINUTE, '0:00:00', CAST(REPLACE(@Value01, '.', ':') AS TIME)) +  DATEDIFF(MINUTE, '0:00:00', CAST(REPLACE(@value02, '.', ':') AS TIME))) % 60 + 100, 2)
       );

Сначала преобразуйте в TIME и получите общее количество минут. Затем отформатируйте минуты до Time, используя . вместо :.

0 голосов
/ 06 марта 2020

Код

declare @v1 DECIMAL(9,3) = 4.369,  -- 9 characters with 3 decimal places.
@v2 DECIMAL(9,3) = 3.368  -- 9 characters with 3 decimal places.
print @v1 + @v2

Выход

7,737

...