2017-10-05 1 views
-1

Ich verwende den folgenden Code, um ein Datum aus einer SQL-Datenbank abzurufen.Datum aus SQL-Recordset fehlende Millisekunden; Automatisch formatiert nach US-Gebietsschema

set db = Server.CreateObject("ADODB.Connection") 
db.Open dbConnection 

Set c1 = Server.CreateObject("ADODB.Command") 
Set c1.ActiveConnection = db 
c1.CommandType = adCmdText 
c1.CommandText = "SELECT [Date] FROM SomeTable WHERE ID=?" 
c1.Parameters.Append c1.CreateParameter("@ID", adVarWChar, adParamInput, 255, CStr(ID)) 

set rs = Server.CreateObject("ADODB.Recordset") 
rs.Open c1, , 1, 3 

rs("Date") Wenn gedruckt wird, wird das Datum als 12/1/2017 2:15:07PM gedruckt.

Das Ausführen der obigen Abfrage in der Datenbank gibt dieses Datum 2017-12-01 14:15:06.675 zurück.

Mein allgemeines Ziel ist es, kein Datum zu erhalten, das auf die nächste volle Sekunde aufgerundet wird. Ich würde lieber ein Datum erhalten, wo die Millisekunden abgezogen und nicht aufgerundet werden. In diesem Fall: 12/1/2017 2:15:06PM.

Es wäre auch in Ordnung sein, das Datum auf die gleiche Weise die Abfrage das Datum zurück zu erhalten: 2017-12-01 14:15:06.675

An diesem Punkt bin ich nicht sicher, was diese Auto-Formatierung des Datums verursacht.

Vielen Dank für Ihre Hilfe :-)

+0

Es macht mir nichts aus, dass diese Frage wird abgelehnt, aber möchte gerne hören, was ich in meiner Frage verbessern kann :-) – jrn

+1

Einverstanden. Ich hasse es, Stimmen ohne Grund zu sehen, warum. Hast du die Chance bekommen, die von mir gepostete Lösung auszuprobieren? –

+1

@JoshMontgomery Es kann frustrierend sein, aber es stammt aus der Erfahrung der Menschen. Es war früher so, dass die Gemeinschaft offener war, aber aufgrund von Rache-Abstimmungen wurde die Wahrscheinlichkeit geringer, offen und ehrlich zu sein. – Lankymart

Antwort

0

Sie DateDiff verwenden können, aber die kleinste Einheit zurückgeben kann, ist Sekunden. obwohl kein Problem Millisekunden von Sekunden zu erhalten:

milliSecs = DateDiff("s", cdate("1970-01-01"), rs("Date")) * 1000 

Sie wahrscheinlich besser dran, um die Spalte einen String konvertiert und Formatierung der [Datum] Spalte direkt in SQL:

c1.CommandText = "SELECT CONVERT(VARCHAR(24), [Date], 121) FROM SomeTable WHERE ID=?" 

für mehr Datum Formate, check out https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql

+0

Großartig! Vielen Dank. Am Ende habe ich die vier richtigen Zeichen (Millisekunden) mit 'someVariable = LEFT (rs (" Date "), (LEN (rs (" Date ")) - 4))' nach Verwendung der modifizierten SELECT-Anweisung entfernt. – jrn

+1

@jrn anstatt dies zu tun, nachdem Josh vorgeschlagen hat, kann alles in der SQL-Abfrage getan werden. Einfach "VARCHAR (24)" im "CONVERT" auf die gewünschte Länge einstellen, in diesem Fall erzeugt 'VARCHAR (20)' das gleiche Ergebnis. – Lankymart

+0

@Lankymart das ist ein großer Vorschlag. Vielen Dank!! – jrn

Verwandte Themen