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 )
* تا جایى که امکانپذیره از حلقه پرهیز کنید.
صبا صبوحى
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.