2

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

         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

4 回答 4

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

但正如你所见,它的参与度越来越高。如果该列是日期时间类型,那将更容易和更安全。

于 2013-07-26T18:54:37.073 回答
2

“操作数数据类型 varchar 对减法运算符无效”数据类型 varchar 无效.. 所以使用 CAST 将数据类型转换为日期时间

于 2014-08-05T02:22:45.597 回答
0
 SELECT basescore,DATEDIFF(DD,MAX(datetime),MIN(datetime))FROM log GROUP BY basescore
于 2013-07-26T18:52:16.753 回答
-3

你必须使用 datediff 函数

http://msdn.microsoft.com/en-us/library/aa258269(v=sql.80).aspx

谢谢

于 2013-07-26T18:50:25.863 回答