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