Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 操作数数据类型varchar对于减法运算符无效_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

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

Sql 操作数数据类型varchar对于减法运算符无效,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,例如,我需要从如下列中减去datetime类型数据: 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, MA

例如,我需要从如下列中减去datetime类型数据:

         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.

有人能帮我解决这个错误吗?提前谢谢

您必须使用datediff函数


谢谢

您的专栏属于VarChar类型。请将转换与DATEDIFF函数结合使用

SELECT basescore, DATEDIFF(DD,MAX(CAST([datetime] as datetime)), MIN(CAST([datetime] as datetime))) FROM log GROUP BY basescore
但我同意——如果列包含datetime数据——它应该是datetime类型

更新:日期和时间之间有一个分号。如果您无法控制导入的数据,则可以根据需要修改上述查询

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类型,则更容易和更安全。

操作数数据类型varchar对于减法运算符无效“数据类型varchar无效。”。。因此,请使用CAST将数据类型转换为datetime

-1请在答案中添加更多链接。这应该是一个注释。你确定DateTime类型的列吗?宾果。使用转换。切勿将日期存储为日期或日期时间以外的任何内容。从未!!!!不要通过在“选择、修复”数据模型中强制转换或转换来解决问题。实际上,我正在从excel文件导入所有数据,请告诉我如何转换数据类型!以下是转换数据类型的代码:从TableName中选择convert(DateTime,)。在使用DATEDIFF而不是
-
后,是否确实有必要这样做?MSDN文档中的示例似乎表明并非如此:它给了我一个错误“Msg 174,级别15,状态1,第1行datediff函数需要3个参数”@AbeMiessler仅适用于最小/最大运算符,因此它们将在正确的数据类型上执行。@user2496503日期和时间之间的分号-是否来自您的导入?如果是这样,您必须在强制转换生效之前将其删除。@user2496503更新了按原样导入数据的情况的答案。这在Yurly的答案上添加了什么?
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