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

标签 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.

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

最佳答案

您的列是 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/

相关文章:

c# - 存储过程不适用于 c# 代码

sql-server - Visual Studio 2008 数据库项目在架构比较期间生成 ALTER DATABASE

sql-server - 在 SQL Server 中基于临时表创建永久表

sql-server-2008 - 我可以将 SQL Server Management Studio 2005 用于 2008 DB 吗?

java - 如何检查 SQL 查询是否没有结果?

sql - 插入日期的默认 getdate

SQL:选择不同值是另一个表的不同值的子集的行

mysql - Sql查询选择table1的sum和table2的sum并相减

sql - Oracle SQL,在包含另一列字符串的一列中搜索字符串

sql - PostgreSql 从选择返回的 ID 中插入