Establezca un campo de base de datos de fecha y hora en "Ahora"

94

En el código de VB.net, creo solicitudes con parámetros SQL. Si configuro un parámetro DateTime en el valor DateTime. Ahora, ¿cómo se verá mi solicitud?

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

o

UPDATE table SET date = GETDATE();

En el primer caso, estoy seguro de que todos los registros se establecerán exactamente a la misma hora. En el segundo caso, depende de cómo el DBMS procese la solicitud. Lo que me lleva a la segunda pregunta: ¿SQL Server establece la misma fecha y hora al actualizar una tabla grande con NOW ()?

EDITAR: reemplazado NOW () (que no existe en SQL Server) por GETDATE ().

Thibault Witzig
fuente

Respuestas:

173

En SQL necesitas usar GETDATE():

UPDATE table SET date = GETDATE();

No hay ninguna NOW()función.


Para responder tu pregunta:

En una tabla grande, dado que la función se evalúa para cada fila, terminará obteniendo valores diferentes para el campo actualizado.

Entonces, si su requisito es configurarlo todo en la misma fecha, haría algo como esto (no probado):

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

UPDATE table SET date = @currDate;
Oded
fuente
Vaya, sí, AHORA () es Mysql, lo siento. Pero las preguntas permanecen.
Thibault Witzig
OK gracias. Así que necesito asegurarme de poner la fecha real (del código) en mi solicitud dans not GETDATE () ¿Lo sabe configurando el parámetro SQL en DateTime? Ahora haré esto o si primero debo convertir la fecha en una cadena y luego agregarlo a la solicitud?
Thibault Witzig
@@ Thibault Witzig - Podrías. O puede usar el SQL que he publicado (obtenga la fecha actual en una variable y use la variable para establecer la fecha en la tabla; el valor de la variable no cambiará).
Oded el
Si desea mantener la misma hora para todos los registros, pase Now como parámetro usando SQL parametrizado. De esa manera, no tiene que preocuparse por el análisis de cadenas o problemas de formato de cadenas de datos localizados.
Jim Wooley
20

Una alternativa a GETDATE () es CURRENT_TIMESTAMP. Hace exactamente lo mismo.

Don Simón
fuente
7
CURRENT_TIMESTAMPes real el estándar SQL, por lo que algunos podrían argumentar que esta es la sintaxis preferida.
Tony L.
Esto está muy mal. Acabo de leer los documentos sobre esos dos y me parece obvio que no son "exactamente lo mismo". Esta pregunta ofrece una explicación más detallada para esto: stackoverflow.com/questions/7105093/…
Mladen B.
7

Utilice GETDATE ()

Devuelve la marca de tiempo del sistema de la base de datos actual como un valor de fecha y hora sin el desplazamiento de la zona horaria de la base de datos. Este valor se deriva del sistema operativo del equipo en el que se ejecuta la instancia de SQL Server.

UPDATE table SET date = GETDATE()
Adriaan Stander
fuente