我有一个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
请帮帮我。
答案 0 :(得分:1)
首先,您必须找到将格式转换为datetime
的方法。下面的子查询通过使其看起来像ODBC规范日期然后调用convert
来实现。然后,您可以将更多convert
与datediff
结合使用,以获得所需的输出格式。
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文件。