De nombreux formats sont pris en charge par SQL Server - consultez la documentation en ligne MSDN sur CAST et CONVERT. La plupart de ces formats sont dépendants sur quels paramètres vous avez - par conséquent, ces paramètres peuvent fonctionner parfois - et parfois non.
La façon de résoudre ce problème est d'utiliser le format de date ISO-8601 (légèrement adapté) qui est pris en charge par SQL Server - ce format fonctionne toujours - quels que soient vos paramètres de langue et de format de date SQL Server.
Le format ISO-8601 est pris en charge par SQL Server et se décline en deux versions :
YYYYMMDD
pour les dates uniquement (pas de partie horaire) ; notez ici :pas de tirets ! , c'est très important !YYYY-MM-DD
n'est PAS indépendant des paramètres de format de date de votre serveur SQL et ne sera PAS fonctionne dans toutes les situations !
ou :
YYYY-MM-DDTHH:MM:SS
pour les dates et les heures - notez ici :ce format a tirets (mais ils peuvent être omis), et unT
fixe comme délimiteur entre la partie date et heure de votreDATETIME
.
Ceci est valable pour SQL Server 2000 et plus récent.
Donc, dans votre cas spécifique, utilisez ces chaînes :
insert into table1 values('2012-02-21T18:10:00', '2012-01-01T00:00:00');
et ça devrait aller (remarque :vous devez utiliser le service international 24 heures plutôt que le format 12 heures AM/PM pour cela).
Alternativement :si vous êtes sur SQL Server 2008 ou plus récent, vous pouvez également utiliser le DATETIME2
type de données (au lieu du simple DATETIME
) et votre INSERT
actuel fonctionnerait sans aucun problème! :-) DATETIME2
est beaucoup mieux et beaucoup moins pointilleux sur les conversions - et c'est de toute façon les types de données date/heure recommandés pour SQL Server 2008 ou plus récent.
SELECT
CAST('02-21-2012 6:10:00 PM' AS DATETIME2), -- works just fine
CAST('01-01-2012 12:00:00 AM' AS DATETIME2) -- works just fine
Ne me demandez pas pourquoi tout ce sujet est si délicat et quelque peu déroutant - c'est comme ça. Mais avec le YYYYMMDD
format, vous devriez être bien pour n'importe quelle version de SQL Server et pour n'importe quel paramètre de langue et de format de date dans votre SQL Server.