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