Der DateTime-Datentyp von SQL ist sehr breites Format, um ein Datum abzuspeichern. Nicht nur das Datum, sondern auch Uhrzeit und Millisekunden können darin gespeichert werden. Ein solches Datum könnte so aussehen.
29.02.1980 23:55:04.678
Das Datum über ADO
Wer versucht mit ADO dieses Datum abzufragen, wird feststellen, dass die Millisekunden nicht übergeben werden. Was tun?
Dafür gibt es jetzt mehrere Möglichkeiten. Hier eine davon.
Über das SQL-Statement können Millisekunden explicit als Field geliefert werden. Hier ein Beispiel für ein solches Statement
SELECT dates.*, cast(datepart(ms,Datum) as char(3)) as DatMS from dates |
Im Statement befinden sich einige SQL-Funktionen...
cast = Konvertiert (hier das Datum) in den gewählten Datentypen. Oben wird in den Zeichenfolgentyp "Char" mit der Grösse 3 konvertiert.
datepart = selectiert aus der Datumsspalte "Datum" einen gewünschten Wert (hier ms für Millisekunden)
hier ein Beispiel, das die Möglichkeiten von "datepart" zeigen soll. "Cast" Konvertiert in "varchar", um das Datum als Zeichenfolge ins eigene Format zu bringen. Das ganze vorgestellt als Stored Procedure in MS-SQL.
CREATE PROCEDURE dt_ganzesdatum AS SELECT cast(datepart(dd, Datum) as char(2)) + '.' + cast(datepart(mm, Datum) as char(2)) + '.' + cast(datepart(yyyy, Datum) as char(4)) + ' ' + cast(datepart(hh, Datum) as char(2)) + ':' + cast(datepart(mm, Datum) as char(2)) + ':' + cast(datepart(ss, Datum) as char(2)) + '.' + cast(datepart(ms, Datum) as char(3)) as SDatum from dates GO |
Jetzt noch den Aufruf der SP in ASP. Die SP wird über das ADO-Command-Object "executed". Daraus entsteht ein Zeiger auf ein Recordset, welches den Rückgabewert der SP darstellt.
Diese Stored Procedure liefert das Feld "SDatum" mit allen Datumswerten.
set cm = Server.CreateObject("ADODB.Command") cm.ActiveConnection = ' hier Connection-String einfügen cm.CommandType = adCmdStoredProc cm.CommandText = "dt_GanzesDatum" set rs = cm.Execute response.write rs.Fields(0) set cm = nothing |
Wie kann ich in ASP das komplette Datum holen ohne SP?
<% strConn = '>>>ConnectionString hier einfügen strSQL = "SELECT dates.*, cast(datepart(ms,Datum) as char(3)) as DatMS from dates" set conn = Server.CreateObject("ADODB.Connection") set rs = Server.CreateObject("ADODB.Recordset") conn.Open strConn rs.Open strSQL, conn rs.Fields("Datum") & "." & rs.Fields("DatMS") set rs = nothing set conn = nothing %> |
TIP!
Wer über ADO versucht, das aktuelle Datum in einer DB zu speichern, kann die "getdate"-Funktion von SQL verwenden. Das Statement sieht dann so aus.
INSERT INTO dates(Datum) VALUES (getdate())