2010-06-29 12 views
58

La siguiente consulta no se actualiza el campo de fecha y hora:¿Cómo se actualiza un campo DateTime en T-SQL?

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

También he probado con sin guiones, pero eso no funciona bien.

+1

es fecha en que el nombre real de la columna? – Gratzy

+1

no en realidad, es EndDate, pero acabo de acortarlo a Date. – Xaisoft

+0

¿recibe un error o simplemente no hay resultados? – Gratzy

Respuesta

26

Normalmente, debería funcionar.

¿Pero puede intentar esto? No tengo SQL en mi PC de casa, no puedo probar a mí 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

+0

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

+0

Bien, en serio no tengo ni idea. Porque escribió sin información de tiempo, y SQL debe adjuntar 00: 00: 00.000 predeterminado de forma automática. Entonces debe ser trabajado. –

1

¿Hay tal vez un disparador en el establecimiento de nuevo la mesa?

+0

Voy a verificarlo dos veces. – Xaisoft

2

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

+3

Su nombre es realmente EndDate – Xaisoft

9

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

Ahora, por supuesto, debe definir "no funciona". No hay registros se actualiza? Tal vez el Id=1 no coincide con ningún registro ...

Si dice 'Un registro cambió', entonces tal vez usted necesita para mostrarnos cómo se verifica ...

+0

Id 1 existe. – Xaisoft

+0

El formato de fecha es por qué estaba pensando que ser explícito sobre la conversión sería una buena idea ... –

+0

Lo bueno Remus, 'SET DATEFORMAT' es realmente eficaz cuando se escribe SQL para entornos con diferentes localizaciones –

8

El uso de 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 use un formato de idioma diferente.

p. Ej.

dado una tabla creada como:

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

La siguiente debería funcionar siempre:

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

El siguiente trabajo:

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 'AAAA-MM-DD' no es un formato independiente del idioma (desde el punto de vista del servidor SQL).

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

Más información: http://www.karaszi.com/SQLServer/info_datetime.asp

1

Si no está interesado en la especificación de un tiempo, también se puede utilizar el formato 'DD/MM/AAAA', sin embargo que se pegaba a un métodoconversión, y su formato ISO relevante, ya que realmente debería evitar el uso de valores predeterminados.

He aquí un ejemplo:

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

4
UPDATE TABLE 
    SET EndDate = CAST('2017-12-31' AS DATE) 
WHERE Id = '123' 
Cuestiones relacionadas