2

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

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

4

5 回答 5

5

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

在此处输入图像描述

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

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

在此处输入图像描述

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

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

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

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

希望能帮助到你。

于 2013-01-23T01:51:12.457 回答
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
于 2015-09-18T00:03:02.190 回答
1

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

于 2012-11-05T00:02:49.740 回答
0

我使用这个 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
于 2013-12-06T13:52:54.137 回答
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
于 2020-03-11T10:53:31.380 回答