¿Cómo se actualiza un campo DateTime en T-SQL?


81

La siguiente consulta no actualiza el campo de fecha y hora:

update table
SET EndDate = '2009-05-25'
WHERE Id = 1

También lo probé sin guiones, pero tampoco funciona.


1
¿Es la fecha el nombre real de la columna?
Gratzy

1
en realidad no, es EndDate, pero lo acorté a Date.
Xaisoft

¿Obtiene un error o simplemente no obtiene resultados?
Gratzy

¿Cuál es el tipo de datos de la EndDatecolumna?
OMG Ponies

Dice 1 fila afectada, pero cuando reviso, la fecha no ha cambiado.
Xaisoft

Respuestas:



33

Normalmente, debería funcionar.

¿Pero puedes probar esto? No tengo SQL en la PC de mi casa, no puedo intentarlo yo mismo

UPDATE table
SET EndDate = '2009-05-25 00:00:00.000'
WHERE Id = 1

1
Esto funcionó, pero lo intenté antes sin todos los ceros y no funcionó. ¿Por qué?
Xaisoft

Probé con '2009-05-25 00: 02: 01.000', pero no funcionó.
Xaisoft

Bien, en serio, no tengo ni idea. Porque escribió sin información de tiempo, y SQL debe adjuntar automáticamente 00: 00: 00.000 por defecto. Por eso hay que trabajarlo.
Serkan Hekimoglu

11

La cadena literal se pega de acuerdo con la configuración de formato de fecha actual, consulte SET DATEFORMAT. Un formato que siempre funcionará es el '20090525'.

Ahora, por supuesto, debe definir "no funciona". ¿No se actualizan los registros? Quizás Id=1no coincida con ningún récord ...

Si dice 'Un registro cambiado', entonces tal vez necesite mostrarnos cómo verifica ...


El formato de fecha es la razón por la que estaba pensando que ser explícito sobre la conversión sería una buena idea ...
OMG Ponies

Buenas cosas Remus, SET DATEFORMATes realmente efectivo al escribir SQL para entornos con diferentes localizaciones
Matt R

¡Increíble! Esto funcionó para mí y me ahorró algunos pasos porque el campo que estoy convirtiendo ya estaba usando este formato, es decir, no es necesario convertirlo a ISO u otro formato primero.
Roberto

8

Usar un parámetro DateTime es la mejor manera. Sin embargo, si aún desea pasar un DateTime como una cadena, entonces el CAST no debería ser necesario siempre que se utilice un formato independiente del idioma.

p.ej

Dada una tabla creada como:

create table t1 (id int, EndDate DATETIME)
insert t1 (id, EndDate) values (1, GETDATE())

Lo siguiente siempre debería funcionar:

update t1 set EndDate = '20100525' where id = 1 -- YYYYMMDD is language agnostic

Lo siguiente funcionará:

SET LANGUAGE us_english
update t1 set EndDate = '2010-05-25' where id = 1

Sin embargo, esto no:

SET LANGUAGE british
update t1 set EndDate = '2010-05-25' where id = 1  

Esto se debe a que 'YYYY-MM-DD' no es un formato independiente del idioma (desde el punto de vista del servidor SQL).

El formato ISO 'AAAA-MM-DDThh: mm: ss' también es independiente del idioma y es útil cuando necesita pasar un tiempo distinto de cero.

Más información: http://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes



2

Eso debería funcionar, pondría corchetes alrededor de [Fecha] ya que es una palabra clave reservada.


2

Si no está interesado en especificar una hora, también puede usar el formato ' DD / MM / YYYY ', sin embargo, me quedaría con un método de conversión y su formato ISO relevante, ya que realmente debería evitar usar valores predeterminados.

He aquí un ejemplo:

SET startDate = CONVERT(datetime,'2015-03-11T23:59:59.000',126) WHERE custID = 'F24'


1

¿Hay tal vez un gatillo en la mesa que lo hace retroceder?


Lo comprobaré dos veces.
Xaisoft
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.