查找第n 天的第n 天

分享于 

3分钟阅读

数据库

  繁體 雙語

介绍

这是在 SQL Server 2000中创建的通用函数。 它采用三个参数,并以日期格式返回第1 周的第1 天。

使用代码

这些代码对于那些希望获得给定月第1 天的第1 天的日期的人非常有用。

为了获得所需的输出,最终用户/dba需要以数字形式传递星期数。 第二个参数由一周中的某一天组成。 有效值可以介于 1至 7之间,其中 1代表星期日,2代表星期一,依此类推。 第三个参数是需要所需数据的月份的任何日期。

例如:如果用户需要搜索 2007年07月的第二个星期五,那么它所需的Exec语句将是:

select dbo.getWeekDay(2,6,'2007-07-10')

上述代码将返回。

CREATEfunction getWeekDay( @var_weeknumint, @var_weekdayint, @var_datedatetime)returnsdatetimeasBEGINdeclare@cntintdeclare@startDayintdeclare@DayDiffrenceint 
 declare@ReturnDatedatetimeset@cnt = 1set@startday = datepart(dw, dateadd(mm, datediff(mm, 0, @var_Date),0))
 set@DayDiffrence = @var_weekday - @startdayset@ReturnDate = dateadd(mm, datediff(mm, 0, @var_date),0)
 if(@DayDiffrence> 0)
 beginset@ReturnDate = dateadd(d,@DayDiffrence,@ReturnDate)
 set@ReturnDate = dateadd(wk,@var_weeknum - 1,@ReturnDate)
 endelsebeginset@ReturnDate = dateadd(d,7 - (@DayDiffrence * -1),@ReturnDate)
 set@ReturnDate = dateadd(wk,@var_weeknum - 1,@ReturnDate)
 endreturn@ReturnDateend

在上面的代码中,@Startday 将初始包含给定月份的起始日期。 对于上示例,它将返回 01 ( 星期日)@DayDiffrence 将传递作为参数传递的@Startday@var_weekday的差异。 在我们的示例中,@DayDiffrence 将具有 01 - 06 = -05作为它的值。 @ReturnDate 将用月份的开始日期初始化。 这意味着这个变量最初将带有给定月份的第一个。 按照上面的例子,@ReturnDate 将有的'2007-07-01 00:00:00'

如果开始日期为,则 @DayDiffrence 将有一个英镑的正数值 required。 在这种情况下,只需要将差异添加到起始日期,并将 1从它的中删除。 在,周,我们需要向它添加 @var_weeknum - 1

@DayDiffrence 如果开始日为 ,则为 negative required required required required。 在这种情况下,只需要将 @DayDiffrence的模块添加到起始日期,第n 周的逻辑与正值的逻辑相同。

历史记录

  • ::: 第一版。

FIND  
相关文章