| 1:每个月的第一天    SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
 最核心的函数是getdate(),大部分人都知道这个是返回当前的日期和时间的函数。下一个执行的函数DATEDIFF(mm,0,getdate())是计算当前日期和“1900-01-01 00:00:00.000”这个日期之间的月数。记住:时期和时间变量和毫秒一样是从“1900-01-01 00:00:00.000”开始计算的。这就是为什么你可以在DATEDIFF函数中指定第一个时间表达式为“0”。下一个函数是DATEADD,增加当前日期到“1900-01-01”的月数。通过增加预定义的日期“1900-01-01”和当前日期的月数,我们可以获得这个月的第一天。另外,计算出来的日期的时间部分将会是“00:00:00.000”。
 
 2:本周的星期一
 SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
 
 3:一年的第一天
 SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
 
 4:季度的第一天
 SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
 
 5:当天的半夜
 SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)
 
 6:上个月的最后一天
 SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
 7:去年的最后一天      SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))
 
 8:本月的最后一天
 为了获得本月的最后一天,稍微修改一下获得上个月的最后一天的语句。修改需要给用DATEDIFF比较当前日期和“1900-01-01”返回的时间间隔上加1。通过加1个月,我计算出下个月的第一天,然后减去3毫秒,这样就计算出了这个月的最后一天。
 SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))
 
 9:本年的最后一天
 SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))。
 
 10:本月的第一个星期一
 Select DATEADD(wk, DATEDIFF(wk,0,  dateadd(dd,6-datepart(day,getdate()),getdate())  ), 0)
 在这个例子里,使用了“本周的星期一”的脚本,并作了一点点修改。修改的部分是把原来脚本中“getdate()”部分替换成计算本月的第6天,在计算中用本月的第6天来替换当前日期使得计算可以获得这个月的第一个星期一。
 11:其他   1:去掉时分秒
 declare @ datetime
 set @ = getdate() --’2003-7-1 10:00:00’
 SELECT @,DATEADD(day, DATEDIFF(day,0,@), 0)
 
 2)显示星期几
 select datename(weekday,getdate())
 
 3)如何取得某个月的天数
 declare @m int
 set @m=2 --月份
 select datediff(day,’2003-’+cast(@m as varchar)+’-15’ ,’2003-’+cast(@m+1 as varchar)+’-15’)
 另外,取得本月天数
 select datediff(day,cast(month(GetDate()) as varchar)+’-’+cast(month(GetDate()) as varchar)+’-15’ ,cast(month(GetDate()) as varchar)+’-’+cast(month(GetDate())+1 as varchar)+’-15’)
 或者使用计算本月的最后一天的脚本,然后用DAY函数区最后一天
 SELECT Day(dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0)))
 
 4)判断是否闰年:
 SELECT case day(dateadd(mm, 2, dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)))) when 28 then ’平年’ else ’闰年’ end
 或者
 select case datediff(day,datename(year,getdate())+’-02-01’,dateadd(mm,1,datename(year,getdate())+’-02-01’))
 when 28 then ’平年’ else ’闰年’ end
 
 5)一个季度多少天
 declare @m tinyint,@time smalldatetime
 select @m=month(getdate())
 select @m=case when @m between 1 and 3 then 1
 when @m between 4 and 6 then 4
 when @m between 7 and 9 then 7
 else 10 end
 select @time=datename(year,getdate())+’-’+convert(varchar(10),@m)+’-01’
 select datediff(day,@time,dateadd(mm,3,@time))
 6)在两个日期范围里所跨越那几周返回如:1,2表是第一周和第二周,
       declare @aa table (date datetime,weekdays int )   declare @i int
 set @i=datediff(day,@bdate,@edate)
 while(@i>=0)
 begin
 insert @aa
 values (dateadd(day,@i,@bdate),datepart(week,dateadd(day,@i,@bdate)))
 set @i=@i-1
 end
 select weekdays
 into #week
 from @AA group by weekdays
    7):在日期范围里减去周六、周日的天数create function a (@Sdate datetime ,@Edate datetime)
 returns   int
 as
 begin
 declare @aa table (date datetime)
 declare @i int
 set @i=datediff(day,@Sdate,@Edate)
 while(@i>=0)
 begin
 insert @aa
 values (dateadd(day,@i,@Sdate))
 set @i=@i-1
 end
 select @i= count(*)  from @aa where   datepart(weekday,date) not in (1,7)
 return @i
 end
 --如:select dbo.A('2004-10-01','2004-10-11')
 --返回结果为7
    8);输入第几周得到此周的开始、结束日期declare @FirstDayOfYear datetime--年頭
 declare @FirstDayWeekOfYear datetime --第一周的第一天
 declare @BDate datetime
 declare @EDate datetime
     select @FirstDayOfYear= dateadd(yy,datediff(yy,0,getdate()),0)                 select   @FirstDayWeekOfYear=@FirstDayOfYear  - datepart(dw, @FirstDayOfYear)+1
     select  @EDate=dateadd(ww,@week,@FirstDayWeekOfYear-1 )select @BDate=  dateadd(ww,-1,dateadd(dd,1,@EDate)  )
 SET @BDate =convert(datetime, convert(char(10),@BDate,101))
 SET @EDate =convert(datetime, convert(char(10),@EDate,101))
 |