Timestamp

Liebe/-r Experte/-in,
Ich habe folgendes Datumsformat:TT-MM-JJJJ hh:mm:ss (z.B. 13-nov-2010 12:45:45)
Ich möchte in meiner Datenbank alles Daten selektieren die nach dem 13.november 2010 oder meintwegen in den letzten 20 Tagen eingetragen wurden.
Wie schaffe ich es mit sql?
Mit Access kriege ich es hin, aber auch wenn ich den sql Code von Access(in php) nehme geht’s nicht
Ich habe so probiert:
Select * from tabelle1 where datum >13-nov-2010 12:45:45 oder
Select * from tabelle1 where datum >13.11.2010 00:00:00
Beide Variante auch ohne Uhrzeit Angabe.
Könnt ihr mir bitte dabei helfen?
Danke
Gruß
BBoli

Hallo BBoli,

SELECT * FROM tabelle1 WHERE Datum > ‚13.11.2010‘

Gruß
Ingo

Hallo,
ich kann dazu leider gar nichts sagen.
Grüße
Scorcher

Datumsformat in Access-SQL-Abfrage
Moin, moin!

Da wird ein anderes Datumsformat erwartet:
#11/25/2010#
für den 25.11.2010

Mit Zeitangaben habe ich in dem Zusammenhang noch nie zu tun gehabt.

Hier zwei Funktionen, die deutsche Formate in amerikanische Formate umwandeln:

Erwartet wird hier eine Datumsangabe in der Form
tt.mm.jjjj, wie 25.11.2010:

Function AmerikanischesDatum(varDeutschDatum As Variant) As String
'Erzeugt einen String, der das uebergebene Datum im amerikanischen Format
'und mit fuehrendem und abschliessenden Numero # ausgibt
Dim strDDatum As String
Dim strAmDatum As String
Dim strJahr As String
Dim strMonat As String
Dim strTag As String
Dim intPos1 As Integer
Dim intPos2 As Integer

strDDatum = Trim$(CStr(varDeutschDatum))
intPos1 = InStr(1, strDDatum, „.“)
intPos2 = InStr(intPos1 + 1, strDDatum, „.“)
strTag = Left$(strDDatum, intPos1 - 1)
strMonat = Mid$(strDDatum, intPos1 + 1, intPos2 - intPos1 - 1)
strJahr = Right(strDDatum, Len(strDDatum) - intPos2)
strAmDatum = „#“ & strMonat & „/“ & strTag & „/“ & strJahr & „#“
AmerikanischesDatum = strAmDatum
End Function

Erwartet wird hier eine deutsche Uhrzeit in der form
22:15

Public Function AmerikanischeZeit(strUhrzeit As String) As String

’ -----------------------------------------------------------
’ Diese Funktion wandelt eine Zeit in eine SQL-Zeit um.
’ -----------------------------------------------------------

On Error GoTo fehler

AmerikanischeZeit = „#“ & Format(Hour(strUhrzeit), „00“) & _
„:“ & Format(Minute(strUhrzeit), „00“) & „:“ & _
Format(Second(strUhrzeit), „00“)
If Hour(strUhrzeit)

Hallo BBoli,

es wäre ganz gut, wenn du noch mitteilen könntest, für welche Datenbank Software (Oracle, SQL-Server, DB2…) du die Abfrage brauchst. Da können Sie nämlich Änderungen ergeben.

Generell könntest du es z.B. mit diesem Probieren:

Datum BETWEEN ‚10.11.2010‘ AND ‚15.12.2010‘

Gruß
Özhan

Select * from tabelle1 where datum >13-nov-2010 12:45:45 oder

Es sollte heißen (in Access-SQL):

Select \* from tabelle1 where datum \>#2010-11-13 12:45:45#

ansonsten:

Select \* from tabelle1 where datum \>'2010-11-13 12:45:45'

Gruß
Reinhard Kraasch

Hallo BBoli,

es wäre ganz gut, wenn du noch mitteilen könntest, für welche
Datenbank Software (Oracle, SQL-Server, DB2…) du die Abfrage
brauchst. Da können Sie nämlich Änderungen ergeben.

Generell könntest du es z.B. mit diesem Probieren:

Datum BETWEEN ‚10.11.2010‘ AND ‚15.12.2010‘

Hallo ich benutz ingres als DB.
Ich habe es wie Reinhard vorgeschlagen(Select * from tabelle1 where datum >‚2010-11-13 12:45:45‘) hat probiert aber es geht nicht.
Ich kriege keine DAten raus
Gruß

SQL select zum gezielen selektieren von Zeiträumen
Vorschlag:

  1. in Datenbanktabelle eine Spalte „eintragDatum“ hinzufügen und den Standardwert „=(getDate())“ definieren.

Damit wird automatisch das aktuelle Datum ermittelt und gespeichert.

Mit dieser Spalte (oder einer anderen falls Du deinen vorhandenen Datumspeicher verwenden willst) nutzen wir dann den 2ten Teilvorschlag:

  1. Je nach Datenbank Version:

SELECT * FROM meineTabelle WHERE DATE_SUB (NOW(), INTERVAL 20 DAY) > eintragDatum

Hinweis: Wenn NULL Werte ausgelassen werden sollen, so musst du angeben:

SELECT * FROM meineTabelle WHERE eintragDatum > 0 AND DATE_SUB(NOW(), INTERVAL 20 DAY) > eintragDatum

Oder Du könntest die Schlüsselfunktion „TO_DAYS“ verwenden, die sich in gewisser Hinsicht Anwenderfreundlich gestalten lässt:

SELECT * FROM meineTabelle WHERE TO_DAYS(NOW()) - TO_DAYS(eintragDatum) > 20

Das sollte in PHP funktionieren.

Achtung:

Ab der MySQL Version 4.1.1 existiert eine neue Datumsfunktion, die entweder Werte als „date“ oder „date / time“ darstellt.

Diese Funktion wird aber keine Zeilen liefern, wo unsere „eintragDatum“ Spalte den Wert „NULL“ besitzt.

Manchmal sieht man den Wert „NULL“ auch als 0000-00-00 oder 0000-00-00 00:00:00. dargestellt. Diese werden herausgefiltert!

Hier folgender Vorschlag:

SELECT * FROM meineTabelle WHERE DATEDIFF (NOW(), eintragDatum) > 20

Um aber auch die mit „NULL“ befüllten Zeilen ebenfalls herauszuholen, kann man folgenden Befehl formulieren:

SELECT * FROM meineTabelle WHERE (eintragDatum = 0) OR DATEDIFF(NOW(), intragDatum) > 20

Mt freundlichen Grüssen

Christian Bartsch

[email protected]
Tel. 089-54041070

Hallo BBoli13,

du mußt noch die Angabe TIMESTAMP einfügen!

Select *
from tabelle1
where datum > TIMESTAMP ‚2010-11-13 12:45:45‘

Gruß
Özhan