SSRS日期时间选择器:允许用户选择时间组件

时间:2012-10-30 07:17:30

标签: sql datetime reporting-services

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

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

5 个答案:

答案 0 :(得分:4)

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

enter image description here

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

  1. 打开报告时间参数的属性
  2. 选择可用值(请参阅下面的附件截图)
  3. enter image description here

    1. 选择指定值并添加值以表示24小时。
    2. 请注意,您还可以从查询中设置可用值。

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

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

      希望它有所帮助。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

我使用这个SQL,它在9:00到21:00之间每隔15分钟生成一次,人们就是任何一行至少有足够的行,即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

答案 4 :(得分:0)

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

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