2017-01-16 3 views
-1

Хорошо, так что я получаю эту ошибку:Im застрял с этим DATEDIFF

Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value ' Days ' to data type int.

Ниже мой код ..... то, что я делаю неправильно здесь .... Я пытаюсь показать день, час и минуту разница ... Я использовал слепков в моем DateDiff, потому что это были разные столбцы, так что я использовал бросок, чтобы соединить их, чтобы сделать это легче сделать мой DATEDIFF .....

DATEDIFF(DD, checkin_datetime, CAST(txt_signoff_ml_date AS DATETIME) + CAST(txt_signoff_ml_time AS DATETIME)) + ' Days ' 
     + DATEDIFF(HH, checkin_datetime, CAST(txt_signoff_ml_date AS DATETIME) + CAST(txt_signoff_ml_time AS DATETIME)) + ' Hours ' 
     + DATEDIFF(MINUTE, checkin_datetime, CAST(txt_signoff_ml_date AS DATETIME) + CAST(txt_signoff_ml_time AS DATETIME)) + ' Minutes' 
AS Time_diff2, 
+1

выборки данных и ожидаемый результат будет получать лучшие ответы. Вы добавляете две даты, которые не звучат логически 'CAST (txt_signoff_ml_date AS DATETIME) + CAST (txt_signoff_ml_time AS DATETIME)' –

+1

[Плохие привычки к удару: использование сокращений с датами/временем операций - Aaron Bertrand - 2011-09-20] (http://sqlblog.com/blogs/aaron_bertrand/archive/2011/09/20/bad-habits-to-kick-using-shorthand-with-date-time-operations.aspx) – SqlZim

ответ

2

Функция DateDiff вернет результат в целое число. И здесь вы комбинируете значение Integer и строковое значение. Таким образом, вы сталкиваетесь с ошибкой разности типов.

Вы должны бросить DateDiff вывод VARCHAR, как указано ниже

cast(DATEDIFF(DD, checkin_datetime, CAST(txt_signoff_ml_date AS DATETIME) + CAST(txt_signoff_ml_time AS DATETIME))as varchar(50)) + ' Days ' 
     + cast(DATEDIFF(HH, checkin_datetime, CAST(txt_signoff_ml_date AS DATETIME) + CAST(txt_signoff_ml_time AS DATETIME))as varchar(50)) + ' Hours ' 
     + cast(DATEDIFF(MINUTE, checkin_datetime, CAST(txt_signoff_ml_date AS DATETIME) + CAST(txt_signoff_ml_time AS DATETIME)) as varchar(50)) + ' Minutes' 
0

Это:

DATEDIFF(DD, checkin_datetime, CAST(txt_signoff_ml_date AS DATETIME) 

нуждается в закрывающей скобе. Это должно заставить вас начать.

+0

На самом деле скобки размещены правильно. Ошибка связана с этим объединением 'integer (результат Datediff)' с 'string (days)'. Он может быть исправлен путем явного преобразования, но я не думаю, что запрос логически правильный –