SQL Abfrage gesucht

Hallo,
ich hab ein paar Probleme folgende Abfrage zu erstellen
in Pseudocode:
SELECT * FROM TempTbl1026382805 WHERE (DATEPART(hh, DATA_DATE) BETWEEN 0 AND 1) AND (DATEPART(mi, DATA_DATE) BETWEEN 50 AND 10)

Also eigentlich habe ich ein DATETIME Feld (DATA_DATE) (MSSQL)
und moechte nun alle Datensatze selektieren die zwischen 00:50:00 und 01:10:00 liegen UNABHÄNGIG vom DATUM!

Vielen Dank im Vorraus
hirustar

hi!

(DATEPART(mi, DATA_DATE) BETWEEN 50 AND 10)

also DAS funktioniert eigentlich rein intuitiv nicht … welche zahl liegt zwischen 50 und 10???

für dieses problem gibt’s ca. 5.234.129 lösungsansätze mit noch mehr lösungen; um bei deinem ansatz zu bleiben (keine ahnung von mysql), würde ich stattdessen

((DATEPART(mi, DATA_DATE) BETWEEN 50 AND 60) or
(DATEPART(mi, DATA_DATE) BETWEEN 0 AND 10))

einsetzen

allerdings gibt’s noch massenhaft andere möglichkeiten (datum in string umwandeln, nur die tagesminuten zählen etc. etc.)

grüße,
tomh

Hallo!
Danke für die schnelle Antwort.

(DATEPART(mi, DATA_DATE) BETWEEN 50 AND 10)

also DAS funktioniert eigentlich rein intuitiv nicht …

weiss ich… ich habs ja nur als pseudocode gemeint, zur Erklärung des Problems.

((DATEPART(mi, DATA_DATE) BETWEEN 50 AND 60) or
(DATEPART(mi, DATA_DATE) BETWEEN 0 AND 10))

Das löst das Problem aber nicht. Denn ich bekomme nun alle Datensätze die eine Minutenzahl von 50-60 oder 0 - 10 haben (egal welche Stunde…) somit würde man, auch wenn ich nur die Datensätze von 01:50:00 bis 02:10:00 haben möchte, auch die Datensätze von vor 01:10:00 selektieren.
Mit Datepart scheint das nicht zu gehen…

Ich dachte das ganze irgendwie in eine Zahl zu konvertieren oder so…
Mfg

hirustar

hi!

((DATEPART(mi, DATA_DATE) BETWEEN 50 AND 60) or
(DATEPART(mi, DATA_DATE) BETWEEN 0 AND 10))

Das löst das Problem aber nicht. Denn ich bekomme nun alle
Datensätze die eine Minutenzahl von 50-60 oder 0 - 10 haben
(egal welche Stunde…) somit würde man, auch wenn ich nur die
Datensätze von 01:50:00 bis 02:10:00 haben möchte, auch die
Datensätze von vor 01:10:00 selektieren.

doch, es löst das problem - nur hab ich mich auf den logischen fehler in deinem statement bezogen (gesamter „pseudocode“):

WHERE (DATEPART(hh, DATA_DATE) = 1 and
DATEPART(mm, DATA_DATE) between 50 and 60) or
(DATEPART(hh, DATA_DATE) = 2 and
DATEPART(mm, DATA_DATE) between 00 and 10)

grüße,
tomh

~forza logische verknüpfungen~

im beispiel versehentlich 1:50 bis 2:10 geprüft - also beim stundenvergleich 0 und 1 einsetzen …

grüße,
tomh

Hallo hirustar

Habe Dir mal einen kleinen Code bebastelt. Damits schnell geht ganz primitiv mit einem Data Objekt. Zum Testen braucht Du eine
Access-Datenbank: Test.mdb
Eine Tabelle: Uhrzeit
Ein Feld: Uhrzeit
FeldTyp: Datum/Uhrzeit
Formt: Zeit, lang

Für die Form:
Ein CommandButton: Command1
Ein Dataobjekt: Data1

Ich hoffe das Du das gebrauchen kannst, Jürgen

Option Explicit

Const iMaxDatensätze = 100
Dim datZeitVon As Date
Dim datZeitBis As Date
Dim rst As Recordset
Dim sFile As String

Private Sub Command1_Click()
Dim datUhrzeit As Date
Dim datDatum As Date
Dim sql As String
Dim i As Integer

Data1.RecordSource = „SELECT * FROM Uhrzeit“
Data1.Refresh
Set rst = Data1.Recordset

'Vorhandene Daten löschen
With rst
If .RecordCount > 0 Then
.MoveLast
While Not .EOF
.Delete
.MoveFirst
Wend
End If
End With
Me.Cls

'Neue Daten in Datenbank schreiben
Randomize
For i = 1 To iMaxDatensätze
'Zufallsuhrzeit
datUhrzeit = TimeSerial(Rnd * 1, Rnd * 59, 0)

'In Datenbank speichern
rst.AddNew
rst!Uhrzeit = datUhrzeit
rst.Update
Next i

'Zeitraum festlegen
datZeitVon = CDate(„00:50:00“)
datZeitBis = CDate(„01:10:00“)

sql = "SELECT * FROM Uhrzeit " & _
„WHERE Uhrzeit BETWEEN #“ & datZeitVon & „# AND #“ & datZeitBis & "# " & _
„ORDER BY Uhrzeit;“
Data1.RecordSource = sql
Data1.Refresh
Set rst = Data1.Recordset

With rst
.MoveFirst
While Not .EOF
Me.Print rst!Uhrzeit
.MoveNext
Wend
End With

End Sub

Private Sub Form_Load()
sFile = App.Path & „“ & „Test.mdb“
Data1.DatabaseName = sFile
End Sub

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]