2016-04-07 18 views
2

Ich möchte eine Liste von Stunden zwischen bis zu Stunden mit einem Intervall von 30 Minuten generieren.Wie Stunden zwischen zwei Stunden in SQL Server generieren?

Zum Beispiel Mitarbeiter tritt um 09:00 Uhr Arbeit und fährt um 18.00 Uhr, so möchte ich generieren:

Hours 
----- 
09:00 
09:30 
10:00 
10:30 
11:00 
11:30 
12:00 
12:30 
13:00 
13:30 
14:00 
14:30 
15:00 
15:30 
16:00 
16:30 
17:00 
17:30 
18:00 

Wie kann ich dies generieren? Vielen Dank.

+0

zeigen alle Ihre Daten aus der Tabelle – Matt

Antwort

5

Mit rekursiven CTE können Sie dieses Ergebnis erzielen.

Versuchen unter Abfrage -

DECLARE @timeFrom TIME = '09:00' 
DECLARE @timeTo TIME = '18:00' 

;with SourceHrs 
as 
(
    select @timeFrom as [Hours] 
    UNION ALL 
    SELECT DATEADD(MINUTE, 30, [Hours]) from SourceHrs WHERE [Hours] < @timeTo 
) 
SELECT CONVERT(VARCHAR(5),Hours,108) FROM SourceHrs 

Ergebnis

Hours 
------- 
09:00 
09:30 
10:00 
10:30 
11:00 
11:30 
12:00 
12:30 
13:00 
13:30 
14:00 
14:30 
15:00 
15:30 
16:00 
16:30 
17:00 
17:30 
18:00 
+0

Vielen Dank für Ihre Antwort Ihr Code funktioniert c richtig. Ich bekomme dieses Ergebnis: 09: 00: 00.0000000, wie bekomme ich dieses Format: 09:00, danke –

+1

Am besten, um die Formatierung in der Präsentationsebene kümmern. –

+1

@ Esraa_92: Ich habe meine Antwort aktualisiert. Sie müssen 'CONVERT (VARCHAR (5), Hours, 108)' in der Select-Anweisung verwenden. Jetzt erhalten Sie die erwartete Ausgabe. –

4

Dies wird Ihnen geben, was Sie brauchen, ist eine Strichliste mit schneller als rekursive:

DECLARE @from time = '09:00' 
DECLARE @to time = '09:00' 

IF @from <= @to 
WITH N(N)AS 
(SELECT 1 FROM(VALUES(1),(1),(1),(1),(1),(1),(1))M(N)), 
tally(N)AS(SELECT ROW_NUMBER()OVER(ORDER BY N.N)FROM N,N a) 
SELECT top (datediff(minute, @from, @to)/ 30 + 1) 
    LEFT(dateadd(minute, (N - 1)*30, @from), 5) 
FROM tally 
+0

Dein Code funktioniert auch richtig für mich, danke :-) –