/*
   此函数判输入日期是该月的第一天还是最后一天
   返回值1,表示是最后一天
         2,表示是第一天
         默认返回0,既不是最后一天也不是第一天
*/
if exists(select 1 from sysobjects where id=object_id('[dbo].[f]') and xtype in ('FN','IF','TF'))
drop function dbo.f
go
create function f
(
@dt datetime
)
returns int
as
begin
     declare @tmp int
     set @tmp=0
     if month(dateadd(day,1,@dt))<>month(@dt)
     set @tmp=1
     if month(dateadd(day,-1,@dt))<>month(@dt)
     set @tmp=2
 
     return @tmp
endgoselect dbo.f('2005-7-1')
select dbo.f('2005-7-31')
select dbo.f('2005-7-4')--结果
/*            
----------- 
2(1 row(s) affected)            
----------- 
1(1 row(s) affected)            
----------- 
0(1 row(s) affected)
*/

解决方案 »

  1.   

    declare @date datetime
    set @date='2005-6-30'
    --求出@date这个月的第一天和最后一天
    declare @start datetime, @end datetime
    set @start=dateadd(mm, datediff(mm, '1901-01-01', @date),'1901-01-01')
    set @end=dateadd(mm, 1+datediff(mm, '1901-01-01', @date),'1901-01-01')
    set @end=dateadd(dd, -1, @end)
    select @start as 第一天, @end as 最后一天
    --判断情况
    if @date=@start select '该月的第一天'
    else 
      if @date=@end select '该月的最后一天'
      else select '两者都不是'