Sql Server 幾個時間計算方法

2022-02-21 02:37:41 字數 2301 閱讀 1273

下面的引數都是傳入乙個日期,試驗時可用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

把它換成下面這個敢不敢?

create

function

[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...