2 4 3 特殊日期加減函式 sql

2021-06-16 01:36:58 字數 2660 閱讀 1742

if exists (select * from dbo.sysobjects where id = object_id(n'[dbo].[f_dateadd]') and xtype in (n'fn', n'if', n'tf'))

drop function [dbo].[f_dateadd]

go/*--特殊日期加減函式

對於日期指定部分的加減,使用dateadd函式就可以輕鬆實現。

在實際的處理中,還有一種比較另類的日期加減處理

就是在指定的日期中,加上(或者減去)多個日期部分

比如將2023年3月11日,加上1年3個月11天2小時。

對於這種日期的加減處理,dateadd函式的力量就顯得有點不夠。

本函式實現這樣格式的日期字串加減處理:

y-m-d h:m:s.m | -y-m-d h:m:s.m

說明:要加減的日期字元輸入方式與日期字串相同。日期與時間部分用空格分隔

最前面乙個字元如果是減號(-)的話,表示做減法處理,否則做加法處理。

如果日期字元只包含數字,則視為日期字元中,僅包含天的資訊。

--*/

/*--呼叫示例

select dbo.f_dateadd(getdate(),'11:10')

--*/

create function dbo.f_dateadd(

@date     datetime,

@datestr   varchar(23)

)returns datetime

asbegin

declare @bz int,@s varchar(12),@i int

if @datestr is null or @date is null

or(charindex('.',@datestr)>0

and @datestr not like '%[:]%[:]%.%')

return(null)

if @datestr='' return(@date)

select @bz=case

when left(@datestr,1)='-' then -1

else 1 end,

@datestr=case

when left(@date,1)='-'

then stuff(rtrim(ltrim(@datestr)),1,1,'')

else rtrim(ltrim(@datestr)) end

if charindex(' ',@datestr)>1

or charindex('-',@datestr)>1

or(charindex('.',@datestr)=0

and charindex(':',@datestr)=0)

begin

select @i=charindex(' ',@datestr+' ')

,@s=reverse(left(@datestr,@i-1))+'-'

,@datestr=stuff(@datestr,1,@i,'')

,@i=0

while @s>'' and @i<3

select @date=case @i

when 0 then dateadd(day,@bz*reverse(left(@s,charindex('-',@s)-1)),@date)

when 1 then dateadd(month,@bz*reverse(left(@s,charindex('-',@s)-1)),@date)

when 2 then dateadd(year,@bz*reverse(left(@s,charindex('-',@s)-1)),@date)

end,

@s=stuff(@s,1,charindex('-',@s),''),

@i=@i+1    

endif @datestr>''

begin

if charindex('.',@datestr)>0

select @date=dateadd(millisecond

,@bz*stuff(@datestr,1,charindex('.',@datestr),''),

@date),

@datestr=left(@datestr,charindex('.',@datestr)-1)+':',

@i=0

else

select @datestr=@datestr+':',@i=0

while @datestr>'' and @i<3

select @date=case @i

when 0 then dateadd(hour,@bz*left(@datestr,charindex(':',@datestr)-1),@date)

when 1 then dateadd(minute,@bz*left(@datestr,charindex(':',@datestr)-1),@date)

when 2 then dateadd(second,@bz*left(@datestr,charindex(':',@datestr)-1),@date)

end,

@datestr=stuff(@datestr,1,charindex(':',@datestr),''),

@i=@i+1

endreturn(@date)

endgo

日期加減函式

1.日期加減函式,date add date sub mysql select date add 2013 05 20 interval 6 day as new day new day 2013 05 26 1 row in set 0.00 sec mysql select date add 2...

mysql日期加減 MySQL日期加減函式詳解

1.addtime 為日期加上指定秒數 select addtime now 1 加1秒 2.adddate 有兩種用法,第二個引數直接填數字的話是為日期加上指定天數,填interval的話是為日期加上指定的interval時間 select adddate now 1 加1天 select add...

SQL 特殊函式

1 coalesce 函式 簡介 t sql的coalesce 函式能夠讓你指定多個表示式,而且coalesce 會返回組裡第乙個非空的值。要使用下面的形式,其中expression可以是任何資料型別,並能夠等於大多數合法的表示式 case when expression1 is not null ...