【问题标题】:String value of 1 day in SQL ServerSQL Server 中 1 天的字符串值
【发布时间】:2012-10-12 00:34:57
【问题描述】:

我需要 1 天的字符串值

“23:59:59”正在运行,但会导致延迟

“24:00:00”不起作用:将数据类型 varchar 转换为 datetime 时出错。

“1.00:00:00”不起作用:将数据类型 varchar 转换为 datetime 时出错。

这是我的代码:

 PROCEDURE [dbo].[Procedure1] 

    @Start datetime, 
    @Finish datetime,
    @TimeRange datetime
AS
BEGIN

    SET NOCOUNT ON;

    declare @TimeRanges as TABLE (SessionStart datetime, SessionEnd datetime);

     with TimeRanges as (
  select @Start as StartTime, @Start + @TimeRange as EndTime
  union all
  select StartTime + @TimeRange, EndTime + @TimeRange
    from TimeRanges
    where EndTime < @Finish )
  select StartTime, EndTime, Count( Test.ScenarioID ) as TotalPeaks
    from TimeRanges as TR left outer join
      dbo.Test as Test on TR.StartTime <= Test.SessionStartTime and Test.SessionCloseTime < TR.EndTime
    group by TR.StartTime, TR.EndTime   
END

【问题讨论】:

  • 为什么不使用 DATEADD 添加时间范围?
  • 我将时间范围拆分为特定时间,例如当@TimeRange = 00:05:00.000 然后代码将它们拆分为 5 分钟,它工作正常,但是当我想要一份每日报告时,我需要使用"24:00:00.000" 或类似 "1.00:00:00.000" 的意思是 1 天

标签: c# .net sql-server datetime time


【解决方案1】:

您正在尝试使用 datetime 类型作为时间跨度类型,这对您不起作用。

我建议您将 timerange 参数更改为整数。然后指定它是秒、分钟、小时、天或其他。

如果你决定让它几天:

PROCEDURE [dbo].[Procedure1] 

    @Start datetime, 
    @Finish datetime,
    @TimeRange int
AS
BEGIN

    SET NOCOUNT ON;

    declare @TimeRanges as TABLE (SessionStart datetime, SessionEnd datetime);

     with TimeRanges as (
  select @Start as StartTime, DATEADD(day, @TimeRange, @Start) as EndTime
  union all
  select DATEADD(day, @TimeRange, StartTime), DATEADD(day, @TimeRange, EndTime)
    from TimeRanges
    where EndTime < @Finish )
  select StartTime, EndTime, Count( Test.ScenarioID ) as TotalPeaks
    from TimeRanges as TR left outer join
      dbo.Test as Test on TR.StartTime <= Test.SessionStartTime and Test.SessionCloseTime < TR.EndTime
    group by TR.StartTime, TR.EndTime   
END

【讨论】:

    猜你喜欢
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    相关资源
    最近更新 更多