如何在sql中添加2个varchar列

时间:2012-08-11 05:02:07

标签: sql

我将timediff字段设为varchar

我想找到这个字段的总和但它给出了错误

"Syntax error converting the varchar value '02:00' to a column of data type int."

我的timediff就像

02:00
03:00
04:00

我想添加并在sql中显示9

请帮帮我

感谢帮助我

3 个答案:

答案 0 :(得分:0)

您无法在varchar列上使用SUM。请查看文档here

您没有向我们提供有关您正在存储的内容或您希望如何总结的信息,但您最好的选择可能是在冒号之前解析数字,将其转换为int并将其相加。

祝你好运!

答案 1 :(得分:0)

如果您正在谈论 MS SQL

你可以做这样的事情

首先通过此

将您的小时表示转换为分钟
select (CONVERT(int,SUBSTRING('02:00',1,2))*60) +
         CONVERT(int,SUBSTRING('02:00',4,2))

然后使用该分钟表示来执行此类添加

select 
DATEADD(
    minute,
    (select (CONVERT(int,SUBSTRING('02:00',1,2))*60) +
     CONVERT(int,SUBSTRING('02:00',4,2))),
    getdate())

答案 2 :(得分:0)

如果你的最终目标是获得hh:mm中所有datadiff记录的总和,那么首先在几分钟内存储datediff而不是hh:mm你提到的here.

如何以分钟为单位存储DateDiff:

SELECT DATEDIFF(second,CAST(<timepart> AS DATETIME) 
, CAST(<timepart> AS DATETIME))/60.0 AS MIN_DIFF;

例如

SELECT DATEDIFF(second,CAST('10:00 AM' AS DATETIME) 
, CAST('11:15 AM' AS DATETIME))/60.0 AS MIN_DIFF;

如何在hh:mm

中完成所有分钟的总和
SELECT CAST((<total minutes> / 60) AS VARCHAR(8)) + ':' 
+ CAST((<total minutes> % 60) AS VARCHAR(2))

例如

SELECT CAST((390 / 60) AS VARCHAR(8)) + ':' 
+ CAST((390 % 60) AS VARCHAR(2))

See this fiddle for all your answers.