Basierend auf einer Auswahl kann ich x Zeilen wie folgt zurückgeben:
1 2019-07-23 10:14:04.000
1 2019-07-23 10:14:11.000
2 2019-07-23 10:45:32.000
1 2019-07-23 10:45:33.000
Wir haben alle Millisekunden mit 0.
Gibt es eine Möglichkeit, 1 mal 1 Millisekunden hinzuzufügen, so dass die Auswahl folgendermaßen aussehen würde:
1 2019-07-23 10:14:04.001
1 2019-07-23 10:14:11.002
2 2019-07-23 10:45:32.003
1 2019-07-23 10:45:33.004
Ich versuche, einen Cursor oder sogar ein Update ohne Erfolg zu erstellen.
Dies ist die Abfrage, um die gewünschten Ergebnisse zu erhalten:
select top 10 ModifiedOn
from [SCHEMA].[dbo].[TABLE]
where FIELD between '2019-07-23 00:00' and '2019-07-23 23:59'
Es gibt 81k-Werte. Das Feld ist DATETIME
.
sql-server
sql-server-2008
datetime
varchar
Racer SQL
quelle
quelle
Antworten:
Datetime
ist nicht genau auf 1 Millisekunde genau. Was Sie verlangen, ist nur möglich, wenn Sie zu einem anderen Datentyp (dhdatetime2
) wechseln .Dokumentation
Wichtiges Zitat:
quelle
Die
DateAdd
Funktion ist was Sie suchen.Verwenden Sie
millisecond
als ersten Parameter der Funktion, um anzugeben, dass Sie Millisekunden hinzufügen. Verwenden Sie dann1
als zweiten Parameter die Anzahl der hinzuzufügenden Millisekunden.In diesem Beispiel wird die aktuelle Zeit in eine Variable übernommen, eine Millisekunde hinzugefügt, das Ergebnis als zweite Variable gespeichert und anschließend jede Variable gedruckt
Ergebnisse:
Hinweis:
Wie Forrest in einer anderen Antwort ausführt,
datetime
garantiert der Datentyp keine Millisekundengenauigkeit. Es wird in Schritten von .000, .003 oder .007 Sekunden gerundet. Wenn Sie Millisekundengenauigkeit wünschen, verwenden Siedatetime2
.quelle
@ Doug-Deden hat den richtigen Ausgangspunkt, aber ich wollte nur versuchen, die ursprüngliche Absicht der Frage zu beantworten - wie man sie auf eine Ergebnismenge mit zunehmenden Millisekunden pro Zeile anwendet.
In diesem Fall können Sie ROW_NUMBER und einen allgemeinen Tabellenausdruck verwenden (wie für Ihre Tabellenstruktur erforderlich bearbeiten, einschließlich Verknüpfungen usw.).
Auswählen, um Werte anzuzeigen:
Update kehrt zur ursprünglichen Tabelle zurück:
quelle
Table1
. Tun Sie einfachUPDATE CTE SET my_date_column =...
Ich habe es mit gemacht
DATETIME2(3)
.Wie Sie in der folgenden Abfrage sehen können, handelt es sich um mehr
economic
:Die Unterschiede zwischen
datetime
unddatetime2
sind gut erklärt hier .Für diese Übung erstelle ich zu Testzwecken eine temporäre Tabelle und fülle sie mit 999 anderen
random dates
als01-jan-2019
und heute (23-july-2019
)und dann in der richtigen Reihenfolge stelle ich die Millisekunden von 1 bis 999 ein
und das bekomme ich: (Teilansicht)
quelle
Eines der anderen Plakate ist richtig;
DATETIME
(in T-SQL) ist nicht millisekundengenau (es ist zentisekundengenau).Für diese Genauigkeit möchten Sie verwenden
DATETIME2
.Hier ist ein Beispiel für das Konvertieren einer Zeichenfolge
datetime
indatetime2
, das Hinzufügen von 1 Millisekunde und das Zurückkonvertieren in eine Zeichenfolge.quelle
varchar
ohne Länge angeben .