我需要一个以12小时格式返回当天所有小时的查询,例如:上午12:00,凌晨1:00,凌晨2:00等。这将在SSRS中用作时间参数的选择字段。我需要选择日期范围内的记录,然后选择该日期范围内的时间范围内的记录。我有这个查询,它以24小时格式返回时间,但它在SSRS中无法正常工作:
With CTE(N)
AS
(
SELECT 0
UNION ALL
SELECT N+30
FROM CTE
WHERE N+5<24*60
)
SELECT CONVERT(TIME,DATEADD(minute,N,0) ,108)
FROM CTE
OPTION (MAXRECURSION 0)
我就是这样做的:
DECLARE @t time(1) = '00:00'; --I use 1 as when I use REPLACE later it means that I can "identify" the correct :00 to remove
WITH N AS(
SELECT N
FROM (VALUES(NULL),(NULL),(NULL),(NULL),(NULL)) N(N)),
Tally AS(
SELECT TOP 24 ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) -1 AS I
FROM N N1, N N2),
Times AS(
SELECT DATEADD(HOUR, I,@t) AS [Time]
FROM Tally)
SELECT T.[Time],
REPLACE(CONVERT(varchar(12),T.Time,9),':00.0',' ') AS TimeString
FROM Times T
ORDER BY T.[Time] ASC;
请注意,我返回time
和varchar
数据类型;两者都很重要,因为varchar
的数据排序与开始时有很大不同,如果你使用SSRS,我怀疑你想要TimeString
的值作为表示事物而不是实际值。