我想使用日期时间选择器来选择日期以及时间组件。日历允许我选择日期,但不可能选择特定时间。
我想选择一个开始和结束时间,从众多数据中选择一个子集。
答案 0 :(得分:4)
我当前的项目中有类似的问题。我的解决方案是为日期添加一个字段(日期/时间的类型)和时间字段。时间字段将显示一个下拉列表,其中包含24小时文本供用户选择(请参阅下面的附加屏幕截图)。
创建下拉列表的步骤很简单:
请注意,您还可以从查询中设置可用值。
此外,检索报告数据的存储过程应将从报告传递的日期和时间转换为日期时间类型,以使其正常工作。下面显示了一个示例:
@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