Lorsque j'exécute l'instruction suivante:

SELECT CAST ('12/08/1988' AS DATE) AS BIRTHDAY

J'obtiens le 1988-12-08, pas le 1988-08-12 au format ISO 8601. Comment SQL Server décide-t-il du format à appliquer pour l'analyse? Je connais les meilleures pratiques, je suis simplement intéressé par où cela mène-t-il et comment cela peut-il être changé?

1
SaneDeveloper 4 août 2017 à 16:55

2 réponses

SQL Server n'a pas de "culture", il analysera toujours une valeur dans ce format comme mm/dd/yyyy (c'est-à-dire au format américain). vous pouvez le contrôler dans une certaine mesure en utilisant DATEFORMAT, par exemple:

SET DATEFORMAT mdy

Cependant, ce sont des formats assez basiques et vous devriez vraiment éviter de vous y fier.

Si vous souhaitez le modifier, vous devez utiliser la fonction CONVERT ou la plus récente PARSE. Par exemple, pour spécifier le format britannique:

SELECT CONVERT(DATE, '12/08/1988', 103)

Ou:

SELECT PARSE('12/08/1988' AS DATETIME USING 'en-GB')
4
DavidG 4 août 2017 à 14:13

Cela sera toujours plus fiable, quels que soient les formats de date:

SELECT CAST ('1988-08-12' AS DATE) AS BIRTHDAY

Comme vous ne spécifiez pas le format, il utilisera le format de date par défaut sur votre instance SQL, qui ressemble à l'anglais américain.

0
Tanner 4 août 2017 à 14:07