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

时间:2019-03-11 15:37:03

标签: sql-server tsql

我需要一个以12小时格式返回一天中所有时间的查询 例如:12:00 am,1:00 am,2:00 am等。这将在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)

1 个答案:

答案 0 :(得分: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的值用作演示文稿,而不是实际的值。