25 Jan 2016

DATEPART – Obtenir le bon numéro de jour de la semaine – TSQL

Peut-être avez-vous eu besoin dans l’un de vos scripts T-SQL de récupérer le numéro de jour de la semaine d’une date. Une fonction T-SQL fait cela parfaitement : la fonction DATEPART(DW, date).

Voici un rapide exemple de ce script :

Grâce au SELECT suivant :

… vous souhaitez, afficher le numéro du jour de la semaine correspondant à mardi… et c’est là où il faut faire attention à une chose toute bête qui s’appelle le langage de l’environnement…

La valeur de retour de la fonction DATEPART, dépend du langage de l’environnement.
En effet, si votre environnement se trouve être en anglais, le premier jour de la semaine sera dimanche et donc, dans notre exemple, la valeur retournée sera 3.
A contrario, si le langage de l’environnement se trouve être le français, le lundi sera considéré comme le premier jour de la semaine et la valeur retournée sera donc 2 !

Si dans notre environnement de DEV tout semble fonctionner, il se peut que dans les autres environnement (RECETTE, PROD,…) le langage soit différent et pour savoir que le problème vient de là il faut s’accrocher !
Une parade existe pour que la valeur de retour soit toujours identique quelque soit l’environnement… il suffit juste d’ajouter en tête de script l’instruction

… où l’argument correspond au langage souhaité… Le formatage de ce langage se trouve dans la table sys.syslanguages qu’il suffit de requêter pour obtenir celui désiré…

Si nous revenons à notre exemple et que nous souhaitons que la valeur retournée soit 2 pour mardi, il faut partir sur le langage français.
Notre script sera donc :

De la même manière, il faut penser à spécifier l’instruction SET DATEFORMAT dans le cas où la date passée en paramètre de DATEPART est une chaîne de caractère.

 

Les sources MSDN sont :

 

Share