操作数数据类型varchar对减法运算符无效

时间:2013-07-26 18:48:03

标签: sql sql-server sql-server-2008

我需要减去日期时间类型数据,例如从以下列中删除:

         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.

有人可以帮我解决这个错误吗?提前谢谢!

4 个答案:

答案 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)