我需要从以下列中减去日期时间类型数据:
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.
有人可以帮我解决这个错误吗?提前致谢!
最佳答案
您的列是 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
但正如您所看到的,它的参与度越来越高。如果该列是日期时间类型,会更容易、更安全。
关于sql - 操作数数据类型 varchar 对于减法运算符无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17888808/