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.
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
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
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 ...
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
UPDATE TABLE
SET EndDate = CAST('2017-12-31' AS DATE)
WHERE Id = '123'
Cela devrait fonctionner, je mettrais des crochets autour de [Date], car il s'agit d'un mot clé réservé.
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'
Y a-t-il peut-être un déclencheur sur la table le repoussant?