Si j'ai une date 01/01/2009, je veux savoir quel jour c'était par exemple lundi, mardi, etc ...
Existe-t-il une fonction intégrée pour cela dans SQL Server 2005/2008? Ou dois-je utiliser une table auxiliaire?
sql
sql-server
datetime
un cheval sans nom
la source
la source
Réponses:
Utilisez
DATENAME
ouDATEPART
:la source
Même si la réponse de SQLMenace a été acceptée, il existe une
SET
option importante que vous devez connaîtreDATENAME renverra le nom de date correct mais pas la même valeur DATEPART si le premier jour de la semaine a été modifié comme illustré ci-dessous.
la source
( @@datefirst - 1 + datepart(weekday, thedate) ) % 7
. Le dimanche sera toujours nul.DayOfWeek
l'énumération aDayOfWeek.Sunday
une valeur de ...0
. Ainsi, quel queDateFirst
soit le paramètre défini, une valeur renvoyée par SQL non traitéeWEEKDAY
ne sera jamais compatible avec l'homologue .NET. Oui, Microsoft.la source
select datename(dw,getdate())
Pour obtenir une valeur déterministe pour le jour de la semaine pour une date donnée, vous pouvez utiliser une combinaison de DATEPART () et @@ datefirst . Sinon, vous dépendez des paramètres du serveur.
Consultez le site suivant pour une meilleure solution: MS SQL: jour de la semaine
Le jour de la semaine sera alors compris entre 0 et 6, où 0 est le dimanche, 1 le lundi, etc. Vous pouvez ensuite utiliser une simple déclaration de casse pour renvoyer le nom de jour de semaine correct.
la source
L'EUROPE :
la source
Avec SQL Server 2012 et versions ultérieures, vous pouvez utiliser la
FORMAT
fonctionla source
ceci est une copie de travail de mon code, vérifiez comment récupérer le nom du jour à partir de la date en sql
la source
Si vous ne voulez pas dépendre
@@DATEFIRST
ou utiliserDATEPART(weekday, DateColumn)
, calculez simplement le jour de la semaine vous-même.Pour les semaines du lundi (Europe), la plus simple est:
Pour les semaines du dimanche (Amérique), utilisez:
Cela renvoie le numéro de semaine (1 à 7) depuis le 1er janvier respectivement le 7 1753.
la source
Vous pouvez utiliser,
DATEPART(dw, GETDATE())
mais sachez que le résultat dépendra de la@@DATEFIRST
valeur de paramètre du serveur SQL qui est le premier jour de la semaine (en Europe, la valeur par défaut 7, qui est le dimanche).Si vous souhaitez remplacer le premier jour de la semaine par une autre valeur, vous pouvez l'utiliser,
SET DATEFIRST
mais cela peut affecter partout dans votre session de requête ce que vous ne souhaitez pas.Une autre méthode consiste à spécifier explicitement la valeur du premier jour de la semaine comme paramètre et à éviter de dépendre du
@@DATEFIRST
réglage. Vous pouvez utiliser la formule suivante pour y parvenir en cas de besoin:où
@WeekStartDay
est le premier jour de la semaine que vous souhaitez pour votre système (de 1 à 7 ce qui signifie du lundi au dimanche).Je l'ai enveloppé dans la fonction ci-dessous afin que nous puissions le réutiliser facilement:
Exemple d'utilisation:
GetDayInWeek('2019-02-04 00:00:00', 1)
Il est équivalent à ce qui suit (mais indépendant du paramètre DATEFIRST du serveur SQL):
la source
Vous pouvez trouver cette version utile.
la source