下面的引數都是傳入乙個日期,試驗時可用getdate()
1、求當月第一天
select @date-day(@date)+1
2、求下月第一天
select dateadd(month,1,@date-day(@date)+1)
就是在當月第一天的基礎上+1月
3、求當月最後一天
select dateadd(month,1,@date-day(@date)+1)-1
就是在下月第一天的基礎上-1天
4、求當月的天數
select day(dateadd(month,1,@date-day(@date)+1)-1)
就是對當月最後一天進行day運算
5、求當月的所有日期
下面還有,省略了。
6、求當月的第幾周
select datepart(week,@date)-datepart(week,@date-day(@date)+1)+1
網上找的是乙個很複雜的演算法,如下:
select datepart(week,dat)-datepart(week,@date-day(@date)+1)+1
from (
select dateadd(day,number,@date-day(@date)+1) as dat
from master..spt_values
where type='p' and day(dateadd(month,1,@date-day(@date)+1)-1)>number
) twhere dat=@date
其實和上面那個是等效的,這太搞笑了吧?算這麼久,其實就想給它傳個當天的引數?
好吧,網上找的乙個算指定日期在當月是第幾周的演算法如下:
create把它換成下面這個敢不敢?function
[dbo
].[fn_getwkofmonth
](@date_param
datetime)
returns
intas
begin
declare
@date
datetime
declare
@wkofmonth
intset
@date
=@date_param
set@wkofmonth
=(select
datepart(week,dat)-
datepart(week,@date
-day(@date)+
1)+1
from (
select
dateadd(day,number,@date
-day(@date)+
1) as dat
from master..spt_values
where type='p
'and
day(dateadd(month,1,@date
-day(@date)+
1)-1)>
number
) twhere dat=
@date)
return
@wkofmonth
endgo
createfunction
[dbo
].[fn_getwkofmonth2
](@date_param
datetime)
returns
intas
begin
declare
@date
datetime
declare
@wkofmonth
intset
@date
=@date_param
set@wkofmonth
=(datepart(week,@date)-
datepart(week,@date
-day(@date)+
1)+1)
return
@wkofmonth
endgo
sqlserver計算量時間相減
select datediff year,開始日期,結束日期 兩日期間隔年 select datediff quarter,開始日期,結束日期 兩日期間隔季 select datediff month,開始日期,結束日期 兩日期間隔月 select datediff day,開始日期,結束日期 兩日...
SQLServer中的幾個重要時間函式
函式 引數 功能 getdate 返回系統目前的日期與時間 datediff interval,date1,date2 以interval 指定的方式,返回date2 與date1兩個日期之間的差值 date2 date1 dateadd interval,number,date 以interval...
sqlserver計算時間差DATEDIFF 函式
datediff 函式 日期和時間 功能 返回兩個日期之間的間隔。語法 datediff date part,date expression 1,date expression 2 date part year quarter month week day hour minute second mi...