/*
此函数判输入日期是该月的第一天还是最后一天
返回值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)
*/
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 '两者都不是'