我需要减去日期时间类型数据,例如从以下列中删除:
datetime
20/03/2013:03:17:43
20/03/2013:03:17:43
20/03/2013:03:17:44
20/03/2013:03:17:44
20/03/2013:03:17:44
20/03/2013:03:17:44
我正在使用SQL Server R2 2008;我的查询如:
SELECT basescore,
MAX(datetime) - MIN(datetime)
FROM log
GROUP BY basescore
但是它一直给我一个错误:
Msg 8117, Level 16, State 1, Line 3
Operand data type varchar is invalid for subtract operator.
有人可以帮我解决这个错误吗?提前谢谢!
答案 0 :(得分:3)
您的列属于VarChar类型。请结合DATEDIFF功能使用转换。
SELECT basescore, DATEDIFF(DD,MAX(CAST([datetime] as datetime)), MIN(CAST([datetime] as datetime))) FROM log GROUP BY basescore
但我同意 - 如果该列包含日期时间数据 - 它应该是日期时间类型。
更新:日期和时间之间有分号。如果您无法控制导入的数据,则可以将上述查询修改为
SELECT basescore, DATEDIFF(DD,MAX(CAST(STUFF([datetime],11,1,' ') as datetime)), MIN(CAST(STUFF([datetime],11,1,' ') as datetime))) FROM log GROUP BY basescore
但正如你所看到的那样越来越多。如果列是datetime类型,那将会更容易和更安全。
答案 1 :(得分:2)
"操作数数据类型varchar对于减法运算符"无效。数据类型varchar无效..因此使用CAST将数据类型转换为datetime
答案 2 :(得分:0)
SELECT basescore,DATEDIFF(DD,MAX(datetime),MIN(datetime))FROM log GROUP BY basescore
答案 3 :(得分:-3)