SQL Query以一列中的日期时间格式列出一天中的所有小时

问题描述 投票:0回答:1

我需要一个以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)
sql-server tsql
1个回答
1
投票

我就是这样做的:

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;

请注意,我返回timevarchar数据类型;两者都很重要,因为varchar的数据排序与开始时有很大不同,如果你使用SSRS,我怀疑你想要TimeString的值作为表示事物而不是实际值。

© www.soinside.com 2019 - 2024. All rights reserved.