sql server 2008 - week - Comment obtenir le numéro de semaine du mois à partir de la date dans le serveur SQL 2008




sql server weekday (11)

Essayez ci-dessous le code:

declare @dt datetime='2018-03-15 05:16:00.000'
IF (Select (DatePart(DAY,@dt)%7))>0
  Select  (DatePart(DAY,@dt)/7) +1
ELSE
  Select  (DatePart(DAY,@dt)/7)

Dans SQL Statement dans Microsoft SQL Server, il existe une fonction intégrée pour obtenir le numéro de semaine, mais c'est la semaine de l'année.

Select DatePart(week, '2012/11/30') // **returns 48**

La valeur retournée 48 est le numéro de semaine de l'année.

Au lieu de 48 , je veux obtenir 1, 2, 3 ou 4 (numéro de semaine du mois). Je pense que le numéro de semaine du mois peut être obtenu par modules avec le numéro de mois de cette semaine. Par exemple

Select DATEPART(week, '2012/11/30')%MONTH('2012/11/30')

Mais je veux savoir s'il y a d'autres fonctions intégrées pour obtenir WeekNumber du mois dans MS SQL SERVER.


Il n'y a pas de fonction intégrée pour obtenir le numéro de la semaine. Je ne pense pas que la division vous aidera de toute façon car le nombre de semaines dans un mois n'est pas constant.

http://msdn.microsoft.com/en-us/library/bb675168.aspx

Je suppose que vous pouvez diviser le nombre (48) par 4 et prendre les modules du même et projeter cela comme le numéro de semaine de ce mois, en ajoutant un au résultat.


Le code est ci-dessous:

set datefirst 7
declare @dt datetime='29/04/2016 00:00:00'
select (day(@dt)+datepart(WEEKDAY,dateadd(d,-day(@dt),@dt+1)))/7

Pas de fonction intégrée. Cela dépend de ce que vous voulez dire par semaine de mois. Vous pourriez vouloir dire si c'est dans les 7 premiers jours (semaine 1), le deuxième 7 jours (semaine 2), etc. Dans ce cas, ce serait juste

(DATEPART(day,@Date)-1)/7 + 1

Si vous souhaitez utiliser la même numérotation de semaine que celle utilisée avec DATEPART (semaine), vous pouvez utiliser la différence entre les numéros de semaine du premier du mois et la date en question (+1):

(DATEPART(week,@Date)- DATEPART(week,DATEADD(m, DATEDIFF(m, 0, @Date), 0))) + 1

Ou, vous pourriez avoir besoin d'autre chose, selon ce que vous entendez par le numéro de semaine.


Semblable à la deuxième solution, moins de code:

declare @date datetime = '2014-03-31'
SELECT DATEDIFF(week,0,@date) - (DATEDIFF(week,0,DATEADD(dd, -DAY(@date)+1, @date))-1)

Solution:

declare @dt datetime='2018-03-31 05:16:00.000'
IF (Select (DatePart(DAY,@dt)%7))>0
Select  (DatePart(DAY,@dt)/7) +1
ELSE
Select  (DatePart(DAY,@dt)/7)

Voici deux manières différentes, les deux supposent que la semaine commence lundi

Si vous voulez que les semaines soient complètes, elles appartiennent donc au mois où elles commencent: Donc samedi 2012-09-01 et dimanche 2012-09-02 c'est la semaine 4 et lundi 2012-09-03 est la semaine 1 utilisez ceci:

declare @date datetime = '2012-09-01'
select datepart(day, datediff(day, 0, @date)/7 * 7)/7 + 1

Si vos semaines de mois changent le samedi 2012-09-01 et le dimanche 2012-09-02 est la semaine 1 et le lundi 2012-09-03 est la semaine 2 utilisez ceci:

declare @date datetime = '2012-09-01'
select datediff(week, dateadd(week, datediff(week, 0, dateadd(month, datediff(month, 0, @date), 0)), 0), @date - 1) + 1

Voici la requête qui amène le numéro de semaine quel que soit le jour de startday et la endday de semaine de la semaine.

SET DATEFIRST 2    

DECLARE @FROMDATE DATE='12-JAN-2015'
-- Get the first day of month
DECLARE @ALLDATE DATE=DATEADD(month, DATEDIFF(month, 0, @FROMDATE), 0)
DECLARE @FIRSTDATE DATE


;WITH  CTE as
(
     -- Get all dates in that month
     SELECT 1 RNO,CAST(@ALLDATE AS DATE) as DATES 
     UNION ALL
     SELECT RNO+1, DATEADD(DAY,1,DATES )
     FROM    CTE
     WHERE   DATES < DATEADD(MONTH,1,@ALLDATE)
)
-- Retrieves the first day of week, ie, if first day of week is Tuesday, it selects first Tuesday 
SELECT TOP 1 @FIRSTDATE =   DATES 
FROM    CTE 
WHERE DATEPART(W,DATES)=1

SELECT (DATEDIFF(DAY,@FIRSTDATE,@FROMDATE)/7)+1 WEEKNO

Pour plus d'informations, j'ai répondu à la question ci-dessous. Peut vérifier ça.


Voici....

Im en utilisant le code ci-dessous ..

DATEPART(WK,@DATE_INSERT) - DATEPART(WK,DATEADD(DAY,1,DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@DATE_INSERT),0)))) + 1

Vous pouvez simplement obtenir le numéro de la semaine en obtenant le numéro de semaine minimum du mois et le déduire du numéro de la semaine. Supposons que vous ayez une table avec des dates

select
    emp_id, dt , datepart(wk,dt) - (select min(datepart(wk,dt))
from
    workdates ) + 1 from workdates

floor((day(@DateValue)-1)/7)+1




tsql