Imposta un campo del database DateTime su "Now"


93

Nel codice VB.net, creo richieste con parametri SQL. Se ho impostato un parametro DateTime sul valore DateTime.Now, come sarà la mia richiesta?

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

o

UPDATE table SET date = GETDATE();

Nel primo caso sono sicuro che ogni record verrà impostato esattamente alla stessa ora. Nel secondo caso dipende da come il DBMS elabora la richiesta. Il che mi porta alla seconda domanda: SQL Server imposta la stessa data e ora durante l'aggiornamento di una tabella di grandi dimensioni con NOW ()?

EDIT: sostituito NOW () (che non esiste in SQL Server) con GETDATE ().

Risposte:


172

In SQL è necessario utilizzare GETDATE():

UPDATE table SET date = GETDATE();

Non c'è nessuna NOW()funzione.


Per rispondere alla tua domanda:

In una tabella di grandi dimensioni, poiché la funzione viene valutata per ogni riga, si finirà per ottenere valori diversi per il campo aggiornato.

Quindi, se la tua esigenza è di impostare tutto alla stessa data, farei qualcosa del genere (non testato):

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

UPDATE table SET date = @currDate;

Oops si ADESSO () è Mysql, scusa. Ma le domande rimangono.
Thibault Witzig

Ok grazie. Quindi devo essere sicuro di inserire la data effettiva (dal codice) nella mia richiesta non GETDATE () Lo sai che imposta il parametro SQL su DateTime.Ora lo farà o se dovessi prima convertire la data in una stringa e poi aggiungerlo alla richiesta?
Thibault Witzig

@@ Thibault Witzig - Potresti. Oppure puoi usare l'SQL che ho pubblicato (ottieni la data corrente in una variabile e usa la variabile per impostare la data nella tabella - il valore nella variabile non cambierà).
Oded

Se si desidera mantenere lo stesso tempo per tutti i record, passare Now come parametro utilizzando SQL parametrizzato. In questo modo, non devi preoccuparti dell'analisi delle stringhe o dei problemi di formattazione delle stringhe di dati localizzate.
Jim Wooley

20

Un'alternativa a GETDATE () è CURRENT_TIMESTAMP. Fa esattamente la stessa cosa.


7
CURRENT_TIMESTAMPè effettivamente lo standard SQL, quindi alcuni potrebbero sostenere che questa è la sintassi preferita.
Tony L.

Questo è del tutto sbagliato. Ho appena letto i documenti su quei due e mi sembra ovvio che quelli non sono "esattamente la stessa cosa". Questa domanda offre una spiegazione più dettagliata per questo: stackoverflow.com/questions/7105093/…
Mladen B.

7

Usa GETDATE ()

Restituisce il timestamp del sistema del database corrente come valore datetime senza l'offset del fuso orario del database. Questo valore deriva dal sistema operativo del computer in cui è in esecuzione l'istanza di SQL Server.

UPDATE table SET date = GETDATE()
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.