web-dev-qa-db-fra.com

Comment mettre à jour un champ DateTime dans T-SQL?

La requête suivante ne met pas à jour le champ datetime:

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

J'ai aussi essayé sans tirets, mais cela ne fonctionne pas non plus.

70
Xaisoft

En cas de doute, soyez explicite sur la conversion du type de données en utilisant CAST/CONVERT :

UPDATE TABLE
   SET EndDate = CAST('2009-05-25' AS DATETIME)
 WHERE Id = 1
135
OMG Ponies

Normalement, ça devrait marcher.

Mais pouvez-vous essayer cela? Je n'ai pas de code SQL sur mon ordinateur personnel, je ne peux pas essayer moi-même

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

La chaîne littérale est passée en fonction du paramètre dateformat actuel, voir SET DATEFORMAT . Un format qui fonctionnera toujours est celui "20090525".

Maintenant, bien sûr, vous devez définir "ne fonctionne pas". Aucun enregistrement n'est mis à jour? Peut-être que _Id=1_ ne correspond à aucun enregistrement ...

Si le message "Un enregistrement a été modifié", vous devrez peut-être nous indiquer comment vous vérifiez ...

9
Remus Rusanu

L'utilisation d'un paramètre DateTime est la meilleure solution. Toutefois, si vous souhaitez toujours transmettre un DateTime en tant que chaîne, le CAST ne devrait pas être nécessaire à condition qu'un format indépendant de la langue soit utilisé.

par exemple.

Étant donné une table créée comme:

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

Ce qui suit devrait toujours fonctionner:

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

Ce qui suit fonctionnera:

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

Cependant, cela ne va pas:

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

En effet, "AAAA-MM-JJ" n'est pas un format indépendant du langage (du point de vue du serveur SQL).

Le format ISO 'AAAA-MM-JJThh: mm: ss' est également indépendant du langage et est utile lorsque vous avez besoin de passer une heure autre que zéro.

Plus d'infos: http://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes

8
Moe Sisko
UPDATE TABLE
   SET EndDate = CAST('2017-12-31' AS DATE)
 WHERE Id = '123'
4
Evgeny Sobolev

Cela devrait fonctionner, je mettrais des crochets autour de [Date], car il s'agit d'un mot clé réservé.

2
mikesl

Si vous n'êtes pas intéressé par la spécification d'une heure, vous pouvez également utiliser le format 'JJ/MM/AAAA', mais je m'en tiendrai à une méthode Conversion, et son format ISO pertinent, car vous devez vraiment éviter les valeurs par défaut.

Voici un exemple:

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

1
OriginalOcto

Y a-t-il peut-être un déclencheur sur la table le repoussant?

1
Gratzy