Setzen Sie ein DateTime-Datenbankfeld auf "Jetzt".

93

Im VB.net-Code erstelle ich Anforderungen mit SQL-Parametern. Wenn ich einen DateTime-Parameter auf den Wert DateTime setze. Wie sieht meine Anfrage nun aus?

UPDATE table SET date = "2010/12/20 10:25:00";

oder

UPDATE table SET date = GETDATE();

Im ersten Fall bin ich sicher, dass jeder Datensatz genau zur gleichen Zeit eingestellt wird. Im zweiten Fall hängt es davon ab, wie das DBMS die Anforderung verarbeitet. Was mich zur zweiten Frage führt: Stellt SQL Server beim Aktualisieren einer großen Tabelle mit NOW () dasselbe Datum und dieselbe Uhrzeit ein?

BEARBEITEN: NOW () (das in SQL Server nicht vorhanden ist) durch GETDATE () ersetzt.

Thibault Witzig
quelle

Antworten:

172

In SQL müssen Sie Folgendes verwenden GETDATE():

UPDATE table SET date = GETDATE();

Es gibt keine NOW()Funktion.


Zur Beantwortung Ihrer Frage:

In einer großen Tabelle erhalten Sie unterschiedliche Werte für das aktualisierte Feld, da die Funktion für jede Zeile ausgewertet wird.

Wenn Sie also alles auf das gleiche Datum einstellen möchten, würde ich so etwas tun (ungetestet):

DECLARE @currDate DATETIME;
SET @currDate = GETDATE();

UPDATE table SET date = @currDate;
Oded
quelle
Ups ja JETZT () ist MySQL, sorry. Aber die Fragen bleiben.
Thibault Witzig
OK danke. Ich muss also sicher sein, dass das tatsächliche Datum (aus dem Code) in meine Anfrage eingefügt wird, nicht in GETDATE (). Wissen Sie, dass der SQL-Parameter auf DateTime gesetzt wird? zur Anfrage hinzufügen?
Thibault Witzig
Thibault Witzig - Sie könnten. Oder Sie können das von mir veröffentlichte SQL verwenden (das aktuelle Datum in eine Variable umwandeln und mit der Variablen das Datum in der Tabelle festlegen - der Wert in der Variablen ändert sich nicht).
Oded
Wenn Sie für alle Datensätze die gleiche Zeit beibehalten möchten, übergeben Sie Now als Parameter mit Parameterized SQL. Auf diese Weise müssen Sie sich keine Gedanken über das Parsen von Zeichenfolgen oder die Formatierung lokaler Datenzeichenfolgen machen.
Jim Wooley
20

Eine Alternative zu GETDATE () ist CURRENT_TIMESTAMP. Tut genau das Gleiche.

Don Simon
quelle
7
CURRENT_TIMESTAMPIst der SQL-Standard aktuell, so könnten einige argumentieren, dass dies die bevorzugte Syntax ist.
Tony L.
Das ist ganz falsch. Ich habe gerade die Dokumente zu diesen beiden gelesen und es scheint mir offensichtlich, dass diese nicht "genau dasselbe" sind. Diese Frage bietet eine detailliertere Erklärung dafür: stackoverflow.com/questions/7105093/…
Mladen B.
7

Verwende GETDATE ()

Gibt den aktuellen Zeitstempel des Datenbanksystems als Datum / Uhrzeit-Wert ohne den Zeitzonenversatz der Datenbank zurück. Dieser Wert wird vom Betriebssystem des Computers abgeleitet, auf dem die Instanz von SQL Server ausgeführt wird.

UPDATE table SET date = GETDATE()
Adriaan Stander
quelle