Ich habe eine vereinfachte Tabelle namens Bookings
, die zwei Spalten BookDate
und BookSlot
hat. Die BookDate
Spalte hat nur Daten (keine Zeit) und die BookSlot
Spalte enthält die Uhrzeit des Tages in Intervallen von 30 Minuten von 0 bis einschließlich 1410. (d. h. 600 = 10:00 Uhr)Wie kann ich einen Wert finden, der in einer Tabelle nicht existiert?
Wie kann ich den ersten verfügbaren Steckplatz in der Zukunft finden (nicht gebucht) ohne läuft durch eine Schleife? Hier
sind die Tabellendefinition und Testdaten:
Create Table Bookings(
BookDate DateTime Not Null,
BookSlot Int Not Null
)
Go
Insert Into Bookings(BookDate,BookSlot) Values('2014-07-01',0);
Insert Into Bookings(BookDate,BookSlot) Values('2014-07-01',30);
Insert Into Bookings(BookDate,BookSlot) Values('2014-07-01',60);
Insert Into Bookings(BookDate,BookSlot) Values('2014-07-01',630);
Insert Into Bookings(BookDate,BookSlot) Values('2014-07-02',60);
Insert Into Bookings(BookDate,BookSlot) Values('2014-07-02',90);
Insert Into Bookings(BookDate,BookSlot) Values('2014-07-02',120);
Ich mag eine Möglichkeit, die erste freie Steckplatz zurückzugeben, die nicht in der Tabelle ist, und das ist in der Zukunft (basierend auf der Serverzeit).
Basierend auf obigen Testdaten:
- Wenn die aktuelle Serverzeit 1. Juli, 12.10 ist, soll das Ergebnis 1. Juli sein, 90min (01.30).
- Wenn die aktuelle Serverzeit 2. Juli, 01:05 war, sollte das Ergebnis 2. Juli, 150min (02:30) sein.
Wenn es in der Zukunft keine Buchungen gibt, würde die Funktion einfach die nächste halbe Stunde in der Zukunft zurückgeben.
-
SQL Fiddle dafür ist hier:
INSERT INTO Bookings (BookDate, BookSlot) Werte ('2014-07-01', 630); bitte erläutern Sie Bookslot Wert von 630 und nachfolgende Werte .. –
OP hat das schon erklärt, die Zahl stellt den 30-Minuten-Intervall-Slot dar, wenn '600' = 10: 00 dann" 630 "wäre 10:30 Uhr – Jamiec
@mmhasannn, Bitte Siehe die obige Erklärung. BookSlot ist in wenigen Minuten pro Tag. 6:30 bedeutet 10:30 Uhr. Teilen Sie einfach durch 60, um die Zeit zu bekommen. – navigator