Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Format de date SQL Server dépendant de l'utilisateur ?

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....