检索持续时间查询

时间:2011-09-11 07:45:26

标签: sql sql-server

我有一个MS SQL 2005服务器。我有一个名为STAT&的数据库。 2列名称STARTRUN& ENDRUN并且里面有很多行。

   STARTRUN     ENDRUN
20110910200007  20110910200017
20110910200028  20110910200037
20110910200048  20110910200057

显示活动的开始时间和结束时间,格式为YYYYMMDDHHMMSS。此列的数据类型为VARCHAR。我正在尝试编写一个SQL脚本,我可以在其中检索每个活动的持续时间并将其转储到csv文件,如下所示。

START DATE  START TIME      END DATE    END TIME    DURATION
10-09-2011  8:00:07 PM      11-09-2011  1:10:10 AM      5:10:03

请帮帮我。

1 个答案:

答案 0 :(得分:1)

首先,您必须找到将格式转换为datetime的方法。下面的子查询通过使其看起来像ODBC规范日期然后调用convert来实现。然后,您可以将更多convertdatediff结合使用,以获得所需的输出格式。

select  convert(varchar, startrun, 105) + ' ' + 
        substring(convert(varchar, startrun, 109), 13, 8) + ' ' + 
        substring(convert(varchar, startrun, 109), 25, 2)
,       convert(varchar, endrun, 105) + ' ' + 
        substring(convert(varchar, endrun, 109), 13, 8) + ' ' + 
        substring(convert(varchar, endrun, 109), 25, 2)
,       substring('0' + cast(datediff(hh, startrun, endrun) 
            as varchar), 1, 2) + ':' +
        substring('0' + cast(datediff(mi, startrun, endrun) % 60 
            as varchar), 1, 2) + ':' +
        substring('0' + cast(datediff(s, startrun, endrun) % 60*60 
            as varchar), 1, 2)
from    (
        select  convert(datetime,
                substring(startrun,1,4) + '-' +
                substring(startrun,5,2) + '-' +
                substring(startrun,7,2) + ' ' +
                substring(startrun,9,2) + ':' +
                substring(startrun,11,2) + ':' +
                substring(startrun,13,2),
                120) as startrun
        ,       convert(datetime,
                substring(endrun,1,4) + '-' +
                substring(endrun,5,2) + '-' +
                substring(endrun,7,2) + ' ' +
                substring(endrun,9,2) + ':' +
                substring(endrun,11,2) + ':' +
                substring(endrun,13,2),
                120) as endrun
        from    @YourTable
        ) as SubQueryAlias

以下是working example at SE Data.请参阅this question,以便将查询结果导出为CSV文件。