Si vous devez spécifier des dates/heures à l'aide de chaînes, vous devez utiliser un sûr , format indépendant de la langue.
Dans SQL Server, c'est le format ISO-8601 (légèrement adapté), et il prend en charge essentiellement deux formats sûrs pour DATETIME
qui fonctionnent toujours - quels que soient vos paramètres de langue, de région et de format de date :
YYYYMMDD (e.g. 20121231 for 31st of December 2012) if you need date only
YYYY-MM-DDTHH:mm:ss (e.g. 2012-12-31T21:05:00 for 31st of December 2012, 9:05pm)
Remarque :
-
le premier format de date uniquement n'a pas de tirets ou délimiteurs !
-
le deuxième format a des tirets pour la date (peut également être omis), et il y a un
T
fixe comme délimiteur entre la date et la partie heure de la chaîne
Mise à jour : selon votre dernier commentaire (sur les différentes langues par défaut pour les deux utilisateurs) - essayez ceci :
-- this is how your `SA` interprets the string as datetime....
SET LANGUAGE english
SELECT CAST('2012-11-30 23:59' AS DATETIME)
Fonctionne très bien...
-- this is how your British user interprets teh string as datetime
SET LANGUAGE british
SELECT CAST('2012-11-30 23:59' AS DATETIME)
Cela essaie d'interpréter la chaîne comme 11e du 30e mois de 2012 et évidemment, ça échoue....