我想使用日期时间选择器来选择日期和时间组件。日历允许我选择日期,但无法选择特定时间。
我想选择开始和结束时间,从大量数据中选择一个子集。
我想使用日期时间选择器来选择日期和时间组件。日历允许我选择日期,但无法选择特定时间。
我想选择开始和结束时间,从大量数据中选择一个子集。
我在当前的项目中遇到了类似的问题。我的解决方案是添加日期字段(日期/时间类型)和时间字段。时间字段将显示一个下拉列表,其中包含 24 小时文本供用户选择(请参阅下面的附加屏幕截图)。
创建下拉列表的步骤很简单:
请注意,您还可以从查询中设置可用值。
此外,检索报告数据的存储过程应将从报告传递的日期和时间转换为 datetime 类型以使其工作。下面显示了一个示例:
@StartDateTime = CONVERT(datetime, convert(nvarchar, @StartDate) +
' ' + CONVERT(nvarchar(12), @starttime))
希望能帮助到你。
我相信我们现在都找到了解决这个问题的方法,但是这是我的解决方案。
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
使用标准 SSRS 日历选择器,选择日期后,您可以单击文本框并在所选日期旁边手动输入时间值。我知道这不是很直观,但它确实有效。我有同样的问题,并且正在寻找一个对用户更友好的解决方案,但这是我目前所能想到的。
我使用这个 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
我将其用作整数参数,然后您可以将分钟数添加到所选日期
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