【问题标题】:SSRS Date time picker: allow user to pick the time componentSSRS 日期时间选择器:允许用户选择时间组件
【发布时间】:2012-10-30 07:17:30
【问题描述】:

我想使用日期时间选择器来选择日期以及时间组件。日历允许我选择日期,但无法选择特定时间。

我想选择开始和结束时间,从大量数据中选择一个子集。

【问题讨论】:

  • 你能告诉我你尝试了什么吗?

标签: sql datetime reporting-services


【解决方案1】:

我在当前的项目中遇到了类似的问题。我的解决方案是添加日期字段(日期/时间类型)和时间字段。时间字段将显示一个下拉列表,其中包含 24 小时文本供用户选择(请参阅下面的附加屏幕截图)。

创建下拉列表的步骤很简单:

  1. 打开报表时间参数的属性
  2. 选择可用值(请参阅下面随附的屏幕截图)

  1. 选择指定值并添加值以表示 24 小时。

请注意,您还可以从查询中设置可用值。

此外,检索报告数据的存储过程应将从报告传递的日期和时间转换为日期时间类型以使其工作。下面是一个示例:

@StartDateTime = CONVERT(datetime, convert(nvarchar, @StartDate) + 
          ' ' + CONVERT(nvarchar(12), @starttime))

希望对你有帮助。

【讨论】:

    【解决方案2】:

    我相信我们现在都找到了解决这个问题的方法,但是这是我的解决方案。

    CREATE PROCEDURE [ssrs].[Params_GetTimeTable]
    (
        @hr_from int = 0,
        @hr_to int = 24,
        @min_interval int = 15
    )
    AS
    BEGIN
    -- Internal Variables
    declare @hr int = @hr_from
    declare @min int = 0
    declare @timetable table
    (
        hhmm varchar(5)
    )
    
    -- Populate the @timetable
        while @hr < @hr_to
        begin
            while @min < 60
            begin
                insert into @timetable(hhmm)
                select 
                    case 
                        when @hr < 10 then '0' + cast(@hr as varchar(2)) + ':' + case when @min < 10 then '0' + cast(@min as varchar(2)) else cast(@min as varchar(2)) end
                        else cast(@hr as varchar(2)) + ':' + case when @min < 10 then '0' + cast(@min as varchar(2)) else cast(@min as varchar(2)) end
                    end
                set @min = @min + @min_interval
            end
            set @hr = @hr + 1
            set @min = 0
        end
    
    --  Add a finishing time to the output table
        insert into @timetable(hhmm)
        select 
            case 
                when @hr < 10 then '0' + cast(@hr as varchar(2)) + ':00'
                else cast(@hr as varchar(2)) + ':00'
            end
    
    -- Return the output
     select hhmm from @timetable
    
    END
    

    通过以下方式测试结果:

    EXEC [ssrs].[Params_GetTimeTable] 0, 24, 15
    

    输出:

    hhmm
    00:00
    00:15
    00:30
    00:45
    01:00
    01:15
    ...
    23:00
    23:15
    23:30
    23:45
    24:00
    

    【讨论】:

    • 有什么选项可以让你到 23:58 的时间吗?我试过了,但它不允许,因为它是 Int 值
    • 我迟到了,但我使用此 SQL 在 SSRS 中生成下拉菜单。选择 24:00 时出现错误,因此我将最后一种情况更改为插入 23:59 而不是 24。“插入 @timetable(hhmm) 值 ('23:59')”
    【解决方案3】:

    使用标准 SSRS 日历选择器,选择日期后,您可以单击文本框并在所选日期旁边手动输入时间值。我知道这不是很直观,但它确实有效。 我也有同样的问题,正在寻找一个对用户更友好的解决方案,但到目前为止我能想到的只有这些。

    【讨论】:

      【解决方案4】:

      我使用这个 SQL,它在 9:00 到 21:00 之间每 15 分钟生成一次,people 就是任何具有至少足够行的表,即 12 或 24。

      select time1
      from
      (
        select hr || ':' || mm time1
        from  
        (
          select  '09' hr
          from  dual
          union
          select  cast(rownum + 9 as varchar(2)) hr 
          from  people 
          where rownum < 12
          order by hr
        )hr,
        (
          select  '00' mm
          from  dual
          union
          select  '15' mm
          from  dual
          union
          select  '30' mm
          from  dual
          union
            select  '45' mm
          from  dual
        )mm
        union
        (
        select  '21:00' time1
        from  dual
        )
      )T1
      order by time1
      

      【讨论】:

        【解决方案5】:

        我将其用作整数参数,然后您可以将分钟数添加到所选日期

        DECLARE @interval INT = 15
        ;WITH cteM AS (
          SELECT 0 M UNION ALL
          SELECT M+@interval FROM cteM
          WHERE M+@interval <= 59
        ), 
        cteH AS (
          SELECT 0 H UNION ALL
          SELECT H+1 FROM cteH
          WHERE H+1 < 24
        )
        SELECT
            RIGHT('0' + CAST(cteH.H AS varchar(2)), 2) + ':' + RIGHT('0' + CAST(cteM.M AS varchar(2)), 2) Label,
            cteH.H*60 + cteM.M Value
        FROM cteM CROSS JOIN cteH
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-04-03
          • 2010-11-21
          • 1970-01-01
          • 2015-12-17
          • 2015-04-30
          • 1970-01-01
          • 2012-09-11
          • 1970-01-01
          相关资源
          最近更新 更多