рдорд╣реАрдиреЗ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рджрд┐рди рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп
рдпрд╣ рд╣рдорд╛рд░реА рд░рдЦрд░рдЦрд╛рд╡ рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд░рд╣рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдб рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рджрд┐рди (рдЬреИрд╕реЗ рдкрд┐рдЫрд▓реЗ рд░рд╡рд┐рд╡рд╛рд░, рдпрд╛ рдкрд╣рд▓реЗ рд╕рдкреНрддрд╛рд╣ рдХреЗ рджрд┐рди) рдкрд░ рдЪрд▓реЗрдЧрд╛, рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕ рд╕рдордп рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рд╣реИ рдЬрдм рдиреМрдХрд░рд┐рдпрд╛рдВ рдЪрд▓ рд░рд╣реА рд╣реЛрдВрдЧреАред рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ред
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЗрд╡рд▓ рддреАрди рдЗрдирдкреБрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕ рдорд╣реАрдиреЗ рдореЗрдВ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕рдВрдЦреНрдпрд╛ред
рдпрд╣ рдЙрд╕реА рддрд░рд╣ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ Microsoft рдорд╛рд╕рд┐рдХ рдХрд╛рд░реНрдп рд╢реЗрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИред
SQL
CREATE FUNCTION dbo.GetMonthDay(@Month DATETIME,@Type INT, @Counter INT) RETURNS DATETIME AS BEGINSET @Month = CONVERT(DATE,DATEADD(DAY,1-DATEPART(DAY,@Month),@Month))DECLARE @CurDate DATETIME=@Month,@Date DATETIME,@Matches INT=0,@TempDate DATETIMEWHILE @CurDate IF (SELECT (CASE @Type WHEN 1 THEN (CASE WHEN DATEPART(WeekDay,@CurDate)=1 THEN 1 ELSE 0 END)WHEN 2 THEN(CASE WHEN DATEPART(WeekDay,@CurDate)=2 THEN 1 ELSE 0 END)WHEN 3 THEN(CASE WHEN DATEPART(WeekDay,@CurDate)=3 THEN 1 ELSE 0 END)WHEN 4 THEN(CASE WHEN DATEPART(WeekDay,@CurDate)=4 THEN 1 ELSE 0 END)WHEN 5 THEN(CASE WHEN DATEPART(WeekDay,@CurDate)=5 THEN 1 ELSE 0 END)WHEN 6 THEN(CASE WHEN DATEPART(WeekDay,@CurDate)=6 THEN 1 ELSE 0 END)WHEN 7 THEN(CASE WHEN DATEPART(WeekDay,@CurDate)=7 THEN 1 ELSE 0 END)WHEN 8 THEN(CASE WHEN DATEPART(WeekDay,@CurDate) IN (1,2,3,4,5,6,7) THEN 1 ELSE 0 END)WHEN 9 THEN(CASE WHEN DATEPART(WeekDay,@CurDate) IN (2,3,4,5,6) THEN 1 ELSE 0 END)WHEN 10 THEN (CASE WHEN DATEPART(WeekDay,@CurDate) IN (1,7) THEN 1 ELSE 0 END)ELSE 0 END))=1 BEGINSET @Matches = @Matches+1SET @TempDate = @CurDateENDIF @Matches=@Counter AND @Counter<32 BEGINSET @Date=@TempDateENDSET @CurDate=DATEADD(DAY,1,@CurDate)ENDRETURN ISNULL(@Date,@TempDate)ENDGO
рдпрд╣ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬреЛ рдорд╛рди рд╣реИрдВ рд╡реЗ sysschedules рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рдорд╛рди рд╣реИрдВ рд▓реЗрдХрд┐рди рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдпрд╣рд╛рдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реВрдВрдЧрд╛;
@рдЯрд╛рдЗрдк
- 1=рд░рд╡рд┐рд╡рд╛рд░
- 2=рд╕реЛрдорд╡рд╛рд░
- 3=рдордВрдЧрд▓рд╡рд╛рд░
- 4=рдмреБрдзрд╡рд╛рд░
- 5=рдЧреБрд░реБрд╡рд╛рд░
- 6=рд╢реБрдХреНрд░рд╡рд╛рд░
- 7=рд╢рдирд┐рд╡рд╛рд░
- 8=рдХрд┐рд╕реА рднреА рджрд┐рди рдХрд╛рдЙрдВрдЯрд░ рддрдХ рдпрд╛ рдорд╣реАрдиреЗ рдХреЗ рдЕрдВрддрд┐рдо рджрд┐рди
- 9=рдХреЛрдИ рднреА рдХрд╛рд░реНрдпрджрд┐рд╡рд╕ рдХрд╛рдЙрдВрдЯрд░ рддрдХ рдпрд╛ рдорд╣реАрдиреЗ рдХреЗ рдЕрдВрддрд┐рдо рджрд┐рди рддрдХ
- 10=рдХрд┐рд╕реА рднреА рд╢рдирд┐рд╡рд╛рд░ рдпрд╛ рд░рд╡рд┐рд╡рд╛рд░ рдХреЛ рдХрд╛рдЙрдВрдЯрд░ рдпрд╛ рдорд╣реАрдиреЗ рдХреА рдЖрдЦрд┐рд░реА рдШрдЯрдирд╛ рддрдХ
@рд╡рд┐рд░реЛрдз рдХрд░рдирд╛
- 1=1рдкреНрд░рдердо
- 2=рджреВрд╕рд░рд╛
- 3=3
- 4=4рде
- 32=рдЕрдВрддрд┐рдо (рдпреЗ рдереЛрдбрд╝реЗ рдЕрд▓рдЧ рд╣реИрдВ)
рдЗрд╕рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд░рдг рд╣реИрдВ;
- рдЗрдирдкреБрдЯ рддрд┐рдерд┐ рдХреЛ рдорд╣реАрдиреЗ рдХреЗ рдкрд╣рд▓реЗ рджрд┐рди рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ
- рдорд╣реАрдиреЗ рдХреЗ рджреМрд░рд╛рди рд╣рдорд╛рд░реЗ рд▓реВрдк рдХреЗ рд▓рд┐рдП рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ
- рдкреНрд░рддреНрдпреЗрдХ рддрд┐рдерд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реВрдк рдХрд░реЗрдВ рдФрд░ рдпрджрд┐ рдХреЛрдИ рдореИрдЪ рд╣реИ рддреЛ рдореИрдЪ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ, рдФрд░ рдЕрдВрддрд┐рдо рдореИрдЪ рдЖрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╕реНрдерд╛рдпреА рддрд┐рдерд┐ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ
- рдпрджрд┐ рдореИрдЪ рд╣рдорд╛рд░реЗ рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИрдВ, рдФрд░ рдХрд╛рдЙрдВрдЯрд░ 5 (5 = рдЕрдВрддрд┐рдо рджрд┐рди) рд╕реЗ рдХрдо рд╣реИ, рддреЛ рд╣рдорд╛рд░реА рд╡рд╛рдкрд╕реА рддрд┐рдерд┐ рдХреЛ рдЕрд╕реНрдерд╛рдпреА рддрд┐рдерд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВ, рдпрд╣ рддрдм рд▓реВрдк рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рддрд┐рдерд┐ рдЕрдм рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИред
- рд╣рдорд╛рд░реА рд╡рд░реНрддрдорд╛рди рддрд┐рдерд┐ рдореЗрдВ рдПрдХ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ рд╣рдорд╛рд░реА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред
- рд╣рдорд╛рд░реА рддрд┐рдерд┐ рд▓реМрдЯрд╛рдПрдВ, рдпрд╛ рдпрджрд┐ рдЕрд╕реНрдерд╛рдпреА рддрд╛рд░реАрдЦ рдХреЛ рд╢реВрдиреНрдп рдХрд░ рджреЗрдВ рдЬреЛ рдХрд┐ рд╣рдорд╛рд░рд╛ рдЕрдВрддрд┐рдо рдореИрдЪ рдерд╛ред
рдиреАрдЪреЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдпрд╣ рдлрд░рд╡рд░реА рдорд╛рд╣ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд░рд╡рд┐рд╡рд╛рд░ рдХреЛ рдЪрд▓реЗрдЧрд╛ред
рд╕рдВрдЧреНрд░рд╣реАрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛ рдирд╣реАрдВ, рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдЗрд╕реЗ рдЖрдИрдПрдл рдХреНрд▓реЙрдЬ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
Testing
SELECT Utilities.dbo.GetMonthDay('2020-02-11',1,1) --2020-02-02 00:00:00.000SELECT Utilities.dbo.GetMonthDay('2020-02-11',1,2) --2020-02-09 00:00:00.000SELECT Utilities.dbo.GetMonthDay('2020-02-11',1,3) --2020-02-16 00:00:00.000SELECT Utilities.dbo.GetMonthDay('2020-02-11',1,4) --2020-02-23 00:00:00.000SELECT Utilities.dbo.GetMonthDay('2020-02-11',1,32)--2020-02-23 00:00:00.000IF Utilities.dbo.GetMonthDay('2020-02-11',1,32)='2020-02-23' BEGINSELECT 'Run your code'END
рдЕрдЧреНрд░рд┐рдо рдкрдарди
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рдЖрдкрдХреЛ рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЪрд╛рд░ рджреЗрддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдкрдХреЛ рдЫреБрдЯреНрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ рдЖрдкрдХреЛ рдПрдХ рдХреИрд▓реЗрдВрдбрд░ рддрд╛рд▓рд┐рдХрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдФрд░ рдЖрдк рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рдкрд░ рдПрдХ рдорд╣рд╛рди рдЙрджрд╛рд╣рд░рдг рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред