Il existe de nombreux formats pris en charge par SQL Server - consultez la documentation en ligne MSDN sur CAST et CONVERT . La plupart de ces formats dépendent des paramètres dont vous disposez - par conséquent, ces paramètres peuvent parfois fonctionner - et parfois non.
La façon de résoudre ce problème consiste à utiliser le format de date ISO-8601 (légèrement adapté) 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 juste des dates (aucune portion de temps); remarquez 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 fonctionnera PAS dans toutes les situations!
ou:
YYYY-MM-DDTHH:MM:SS
pour les dates et les heures - notez ici: ce format a des tirets (mais ils peuvent être omis), et un T
séparateur fixe entre la partie date et heure de votre fichier DATETIME
.
Ceci est valable pour SQL Server 2000 et plus récent.
Donc, dans votre cas concret, utilisez ces chaînes:
insert into table1 values('2012-02-21T18:10:00', '2012-01-01T00:00:00');
et ça devrait aller (note: vous devez utiliser le format international de 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 de plain DATETIME
) et votre courant INSERT
fonctionnera sans aucun problème! :-) DATETIME2
est beaucoup mieux et beaucoup moins pointilleux sur les conversions - et ce sont les types de données date / heure recommandés pour SQL Server 2008 ou plus récent de toute façon.
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 juste comme ça. Mais avec le YYYYMMDD
format, vous devriez être bien pour n'importe quelle version de SQL Server et pour tout paramètre de langue et de format de date dans votre SQL Server.