資料庫 日期加減處理

2022-09-25 05:24:12 字數 2772 閱讀 4301

在實際的處理中,還有一種比較另類的日期加減處理,就是在指定的日期中,加上(或者減去)多個日期部分,比如將2023年3月11日,加上1年3個月11天2小時。對於這種日期的加減處理,dateadd函式的力量就顯得有點不夠。

要實現多個日期部分的加減處理,最主要的就是把要加減的日期字元分解,然後根據分解的結果在指定日期的對應日期部分加上相應的值,其難點在於如何分解日期字元,以及判斷分解後的日期字元屬於哪個日期部分。要順利地分解出日期字元的話,首先要規定日期加減的日期字元的格式,可以這樣定義:

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

複製** **如下:

說明:要加減的日期字元輸入方式與日期字串相同。日期與時間部分用空格分隔,最前面乙個字元如果是減號(-)的話,表示做減法處理,否則做加法處理。如果日期字元只包含數字,則視為日期字元中,僅包含天的資訊。

確定了日期字元格式後,處理方法就可以這樣確定:獲取日期字元的第乙個字元,判斷處理方式,然後將要加減的日期字元按空格分拆為日期和時間兩部分,對於日期部分從低位到高位逐個擷取日期資料進行處理,對於時間從高位到低位逐個處理。

以下是實現日期的多個部分同時加減處理的使用者定義函式**:

複製** **如下:

create function f_dateadd(

@date datetime,

@datestr varchar(23)

)returns datetime

as begin

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

end

if @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)-www.cppcns.com1),@date)

when 2 then dateadd(程式設計客棧swww.cppcns.comecond,@bz*left(@datestr,charindex(':',@datestr)-1),@date)

end,

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

@i=@i+1

end

return(@date)

end

本文標題: 資料庫 日期加減處理

本文位址: /shujuku/mssql/49892.html

mysql資料庫ysql日期加減

mysql 為日期增加乙個時間間隔 date add set dt now select date add dt,interval 1 day 加1天 select date add dt,interval 1 hour 加1小時 select date add dt,interval 1 minu...

日期加減處理

日期加減處理 對於日期指定部分的加減,使用 dateadd 函式就可以輕鬆實現。在實際的處理中,還有一種比較另類的日期加減處理,就是在指定的日期中,加上 或者減去 多個日期部分,比如將 2005年3 月11日,加上1年 3個月11天 2小時。對於這種日期的加減處理,dateadd 函式的力量就顯得有...

ORACLE 日期加減處理

語法 numtoyminterval n char expr char expr 日期描述,可以是year和month 作用 可以將數字轉換成相應的日期單位時間 比如 numtoyminterval 1,month 表示乙個月 numtoyminterval 1,year 表示一年 月份加減 sel...