Параметры сортировки на уровне сервера могут убить любые вычисления, поэтому nomater, какой сервер вы используете, вы хотите убедиться, что вы на 100% уверены, что ваш string dates and times
по существу преобразован в SQL Server datetime
.
На основании вашего примера я предположил, что это обычный формат, который у вас есть, поэтому вы можете попробовать что-то вроде этого:
DECLARE @ExcelDate1 CHAR(10) = '30/10/2018'
DECLARE @ExcelTime1 CHAR(5) = '10:53'
DECLARE @ExcelDate2 CHAR(10) = '29/10/2018'
DECLARE @ExcelTime2 CHAR(5) = '09:37'
--> make sure that whatever server collation you use you will get a right date format:
DECLARE @ExcelDateTime1 datetime = DATETIMEFROMPARTS(CAST(RIGHT(@ExcelDate1,4) as int), CAST(SUBSTRING(@ExcelDate1,4,2) as int), CAST(LEFT(@ExcelDate1,2) as int), CAST(LEFT(@ExcelTime1,2) as int), CAST(RIGHT(@ExcelTime1,2) as int), 0, 0);
DECLARE @ExcelDateTime2 datetime = DATETIMEFROMPARTS(CAST(RIGHT(@ExcelDate2,4) as int), CAST(SUBSTRING(@ExcelDate2,4,2) as int), CAST(LEFT(@ExcelDate2,2) as int), CAST(LEFT(@ExcelTime2,2) as int), CAST(RIGHT(@ExcelTime2,2) as int), 0, 0);
SELECT ABS(DATEDIFF(mi, @ExcelDateTime1, @ExcelDateTime2) / 60.0);
РЕЗУЛЬТАТ: 25.266666
Чтобы получить 7 в качестве последней цифры вы можете использовать функцию ROUND()
.