DevTrain

Autor: Bernhard Elbl

SQL´s DateTime ... und seine Millisekunden

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())


Erfasst am: 10.09.2001 - Artikel-URL: http://www.devtrain.de/news.aspx?artnr=622
© Copyright 2003 ppedv AG - http://www.ppedv.de