Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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 server 2008 Sql和特定时间_Sql Server 2008 - Fatal编程技术网

Sql server 2008 Sql和特定时间

Sql server 2008 Sql和特定时间,sql-server-2008,Sql Server 2008,我的sql表中有一个varchar类型的列,正在从中收集工作时间。。。 如果我给你这样的工作时间 WorkingHours ------------ 1 5 8 我可以找到这个WorkingHours列值的总和,比如sum(WorkingHours),但这里我需要给出更具体的计时,比如 WorkingHours ------------ 01:30 2 01:15 04:45 像这样,是否可以对这些值求和,我尝试了同样的方法,

我的sql表中有一个varchar类型的列,正在从中收集工作时间。。。 如果我给你这样的工作时间

WorkingHours
------------
     1
     5
     8
我可以找到这个WorkingHours列值的总和,比如
sum(WorkingHours)
,但这里我需要给出更具体的计时,比如

WorkingHours
------------
    01:30
      2
    01:15
    04:45
像这样,是否可以对这些值求和,我尝试了同样的方法,但我没有找到任何解决方案,这里有人能帮我吗?

从表中选择cast(dateadd(毫秒,sum(datediff(毫秒,0,cast(totalhrs as datetime))),0)as time)

这是将精度提高到毫秒的语法

有关详细说明,请参阅。

从表中选择转换(日期添加(毫秒,总和(日期差,毫秒,0,转换(总小时为日期时间))),0)作为时间)

这是将精度提高到毫秒的语法


有关详细说明,请参阅。

为什么将时间存储为varchar?使用时间或日期时间当然

请注意,“2”,如果可转换,将是48小时或2天。如果您不想修复数据或数据类型,则必须解决此问题

DECLARE @feckedTable TABLE (WorkingHours varchar(5));

INSERT @feckedTable (WorkingHours) VALUES ('01:30'), ('02:00'), ('01:15'), ('04:45');

SELECT
    SUM(DATEDIFF(minute, 0, CAST(WorkingHours AS smalldatetime))) AS TotalTime
FROM
    @feckedTable

SELECT
    CAST(TotalTime/60 AS varchar(4)) + ':' + CAST(TotalTime % 60 AS char(2))
FROM
    (
    SELECT
        SUM(DATEDIFF(minute, 0, CAST(WorkingHours AS smalldatetime))) AS TotalTime
    FROM
        @feckedTable
    ) X

为什么将时间存储为varchar?使用时间或日期时间当然

请注意,“2”,如果可转换,将是48小时或2天。如果您不想修复数据或数据类型,则必须解决此问题

DECLARE @feckedTable TABLE (WorkingHours varchar(5));

INSERT @feckedTable (WorkingHours) VALUES ('01:30'), ('02:00'), ('01:15'), ('04:45');

SELECT
    SUM(DATEDIFF(minute, 0, CAST(WorkingHours AS smalldatetime))) AS TotalTime
FROM
    @feckedTable

SELECT
    CAST(TotalTime/60 AS varchar(4)) + ':' + CAST(TotalTime % 60 AS char(2))
FROM
    (
    SELECT
        SUM(DATEDIFF(minute, 0, CAST(WorkingHours AS smalldatetime))) AS TotalTime
    FROM
        @feckedTable
    ) X

感谢您的回复,我收到了类似“从字符串转换日期和/或时间时转换失败”的错误。我已经用StackOverflow上的类似问题更新了答案。这里的开始时间和结束时间是什么?感谢您的回复,我收到了类似的错误“从字符串转换日期和/或时间时,转换失败。”我用以前在StackOverflow上提出的类似问题更新了答案。这里的开始时间和结束时间是多少?感谢您的响应gbn,我收到了类似“操作数数据类型smalldatetime对于求和运算符无效”的错误。如果值类似于“2”,我们如何求和?”02:30,“01:20”@Shanish:不要使用“2”。这是有用的感谢您的响应gbn,我收到了类似“操作数数据类型smalldatetime对于求和运算符无效”的错误。如果值像“2”、“02:30”、“01:20”@Shanish:不要使用“2”,我们如何求和?这是有用的