ورود

View Full Version : پیدا کردن تعداد شنبه و شکشنبه های بین دو تاریخ



ali15462002
شنبه 04 اسفند 1386, 11:37 صبح
چطور میتوانیم تعداد شنبه و یکشنبه های بین دو تاریخ را بدست آورد؟

shahramasp
شنبه 04 اسفند 1386, 11:47 صبح
بله اتفاقا این سوال من هم هست !

Elham_gh
شنبه 04 اسفند 1386, 13:08 عصر
DECLARE @StartDate AS DATETIME
DECLARE @EndDate AS DATETIME
DECLARE @CurrentDate AS DATETIME
DECLARE @Counter AS INT
SET @Counter=0
SET @StartDate='2008-02-10'
SET @EndDate='2008-03-16'

SET @CurrentDate=@StartDate
WHILE @CurrentDate<=@EndDate
BEGIN
IF DATENAME(WEEKDAY,@CurrentDate)='Saturday'
SET @Counter=@Counter+1
SET @CurrentDate=DATEADD(DAY,1,@CurrentDate)

END

SELECT @Counter

AminSobati
یک شنبه 05 اسفند 1386, 02:09 صبح
در صورت لزوم برای بدست آوردن انعطاف پذیری بیشتر در Query گرفتن، از تکنیکهای Set Based میتونین استفاده کنین (SQL Server 2005)



DECLARE @StartDate AS DATETIME
DECLARE @EndDate AS DATETIME
SET @StartDate='2008-02-10'
SET @EndDate='2008-03-16'
DECLARE @x XML
DECLARE @y VARCHAR(MAX)
SET @y='<a/>'
SET @x=REPLICATE(@y,DATEDIFF(DAY,@StartDate,@EndDate)+ 1)

SELECT DATEADD(DAY,ROW_NUMBER() OVER (ORDER BY c)-1,@StartDate) AS Today,
DATENAME(WEEKDAY,DATEADD(DAY,ROW_NUMBER() OVER (ORDER BY c)-1,@StartDate)) AS WDay FROM @x.nodes('/a') tmp(c)

;WITH MyCTE AS
(SELECT DATEADD(DAY,ROW_NUMBER() OVER (ORDER BY c)-1,@StartDate) AS Today,
DATENAME(WEEKDAY,DATEADD(DAY,ROW_NUMBER() OVER (ORDER BY c)-1,@StartDate)) AS WDay FROM @x.nodes('/a') tmp(c))
SELECT COUNT(*) FROM MyCTE WHERE WDay='Saturday'

SabaSabouhi
یک شنبه 05 اسفند 1386, 08:54 صبح
با سلام
خیلى راحته، کافیه محاسبه ریاضى‌ش رو انجام بدین، ساده کنید و بعد تبدیل کنید به SQL ( نه این که از اول دنبال روش SQLى بگردین )

فرض: خود روزهاى «زمان1» و «زمان2» هم حساب مى‌شوند یعنى اگه «زمان1» شنبه و «زمان2» شنبه‌ى هفته‌ى بعد باشد پاسخ باید 2 باشد.

اول یک روز شنبه رو به عنوان مبدا انتخاب کنیم.
براى محاسبه‌ى تعداد روزهاى شنبه بین مبدا تا «زمان1» با توجه به فرض مساله از فرمول زیر استفاده مى‌کنیم. ( عدم شمارش «زمان1» اگر شنبه باشد )



DateDiff( d, @SaturdayDate, DateAdd( d, -1, @StartDate))


و براى محاسبه تعداد روزهاى شنبه بین مبدا تا «زمان2» با توجه به فرض مساله از فرمول زیر استفاده مى‌کنیم. ( شمارش «زمان2» اگر شنبه باشد )



DateDiff( d, @SaturdayDate, @EndDate)


و با تفریق کردن دو عدد به جواب دقیق مى‌رسیم:



DECLARE @SaturdayDate as DATETIME
DECLARE @StartDate AS DATETIME
DECLARE @EndDate AS DATETIME
SET @SaturdayDate = '2008-02-09'
SET @StartDate='2008-02-10'
SET @EndDate='2008-03-16'
SELECT ( DateDiff( d, @SaturdayDate, @EndDate) / 7 )
- ( DateDiff( d, @SaturdayDate, DateAdd( d, -1, @StartDate)) / 7 )



* تا جایى که امکان‌پذیره از حلقه پرهیز کنید.

صبا صبوحى