Définissez un champ de base de données DateTime sur "Maintenant"

94

Dans le code VB.net, je crée des requêtes avec des paramètres SQL. Si j'ai défini un paramètre DateTime sur la valeur DateTime.Maintenant, à quoi ressemblera ma demande?

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

ou

UPDATE table SET date = GETDATE();

Dans le premier cas, je suis sûr que chaque enregistrement sera réglé exactement à la même heure. Dans le second cas, cela dépend de la manière dont le SGBD traite la demande. Ce qui m'amène à la deuxième question: SQL Server définit-il la même date et heure lors de la mise à jour d'une grande table avec NOW ()?

EDIT: remplacé NOW () (qui n'existe pas dans SQL Server) par GETDATE ().

Thibault Witzig
la source

Réponses:

173

En SQL, vous devez utiliser GETDATE():

UPDATE table SET date = GETDATE();

Il n'y a pas de NOW()fonction.


Pour répondre à ta question:

Dans une grande table, puisque la fonction est évaluée pour chaque ligne, vous obtiendrez des valeurs différentes pour le champ mis à jour.

Donc, si votre exigence est de tout régler à la même date, je ferais quelque chose comme ça (non testé):

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

UPDATE table SET date = @currDate;
Oded
la source
Oups oui MAINTENANT () est Mysql, désolé. Mais les questions demeurent.
Thibault Witzig
OK merci. Donc, je dois être sûr de mettre la date réelle (à partir du code) dans ma requête dans pas GETDATE () Savez-vous qu'il définit le paramètre SQL sur DateTime.Now fera ceci ou si je devrais d'abord convertir la date en une chaîne, puis l'ajouter à la demande?
Thibault Witzig
@@ Thibault Witzig - Vous pourriez. Ou vous pouvez utiliser le SQL que j'ai publié (obtenir la date actuelle dans une variable et utiliser la variable pour définir la date dans le tableau - la valeur de la variable ne changera pas).
Oded
Si vous souhaitez conserver la même heure pour tous les enregistrements, passez maintenant en tant que paramètre à l'aide de SQL paramétré. De cette façon, vous n'avez pas à vous soucier des problèmes d'analyse de chaîne ou de formatage de chaîne de données localisée.
Jim Wooley
20

Une alternative à GETDATE () est CURRENT_TIMESTAMP. Fait exactement la même chose.

Don Simon
la source
7
CURRENT_TIMESTAMPest le standard SQL, donc certains pourraient dire que c'est la syntaxe préférée.
Tony L.
C'est tout à fait faux. Je viens de lire les documents sur ces deux et il me semble évident que ce ne sont pas "exactement la même chose". Cette question offre une explication plus détaillée à cela: stackoverflow.com/questions/7105093/…
Mladen B.
7

Utilisez GETDATE ()

Renvoie l'horodatage du système de base de données actuel sous forme de valeur datetime sans le décalage de fuseau horaire de la base de données. Cette valeur est dérivée du système d'exploitation de l'ordinateur sur lequel s'exécute l'instance de SQL Server.

UPDATE table SET date = GETDATE()
Adriaan Stander
la source