mysql算兩月份的差 sql計算兩個時間月份之差

2021-10-18 23:46:25 字數 2905 閱讀 7820

if  exists (select * from sys.objects where object_id = object_id(n'[dbo].getmonth') and type in (n'fn', n'if', n'tf', n'fs', n'ft'))

drop function [dbo].getmonth

gocreate function getmonth (@stadate datetime,@enddate datetime)

returns decimal(20,2)

asbegin

--declare @stadate datetime,@enddate datetime

declare  @moths decimal(20,2)

declare  @day int

declare  @str  int;

--set  @stadate='2013-01-29'

--set @enddate='2013-10-15'

set @str = 0;

set @moths=0

set @day=datepart(day,@stadate)

--判斷開始日期是不是月底

if( convert(varchar(10),@stadate,120)!=convert(datetime, convert(varchar(7),@stadate,120)+'-'+convert(varchar(2),dbo.getmonths(@stadate))))

begin

select @str=1

end--select dateadd(month,+1,@stadate),dateadd(day,-1,dateadd(month,+2,convert(datetime, convert(varchar(7),@stadate,120)+'-01')))

--select dateadd(day,-1,convert(datetime, convert(varchar(7),@stadate,120)+'-'+convert(varchar(2),@day)))

--select  dateadd(day,-1,dateadd(month,+1,@stadate))

--select dateadd(day,-2,dateadd(month,+2,convert(datetime, convert(varchar(7),@stadate,120)+'-01'))),dateadd(month,+2,convert(datetime, convert(varchar(7),@stadate,120)+'-01'))

if(@str=0)--如果是月底

begin

while(@stadatebegin

--  //取當前月1號加兩個月減兩天得到月末的後一天減兩天

if(dateadd(day,-2,dateadd(month,+2,convert(datetime, convert(varchar(7),@stadate,120)+'-01')))     begin

set @stadate=dateadd(day,-2,dateadd(month,+2,convert(datetime, convert(varchar(7),@stadate,120)+'-01')))

set  @moths=@moths+1

endelse

begin

break;

endend

endelse

begin

while(@stadate<=dateadd(day,+1,@enddate))

begin

--加乙個月後是不是大於結束日期  @enddate=2014-03-01

if( dateadd(month,+1,@stadate)<=dateadd(day,+1,@enddate))

begin

set @stadate=dateadd(month,+1,@stadate)

--判斷是不是月底 比如1-30加乙個月 到2-28好

if(@stadatebegin

set @stadate=convert(datetime, convert(varchar(7),@stadate,120)+'-'+convert(varchar(2),@day))

set  @moths=@moths+1

endelse if(@stadate=dateadd(day,-1,dateadd(month,+1,convert(datetime, convert(varchar(7),@stadate,120)+'-01'))))

begin

set @stadate=dateadd(day,-1,dateadd(month,+1,convert(datetime, convert(varchar(7),@stadate,120)+'-01')))

set  @moths=@moths+1

endend

else

begin

break;

endend

endif(@str!=0)

begin

set @stadate=  dateadd(day,-1,@stadate)

endelse

begin

if(@moths>0)

begin

set @stadate=  dateadd(day,+1,@stadate)

endend

if(@stadate    begin

select @moths=@moths+(convert(decimal(20,2), datediff ( day ,@stadate ,@enddate )+1)/convert(decimal(20,2), dbo.getmonths(@enddate)))

endreturn @moths

end

MySQL 查詢效能差的SQL

sql查詢優化 如何獲取效能差的sql 1.通過使用者反饋獲取的存在效能問題的sql 2.通過慢查日誌獲取的存在效能問題的sql show query log 啟動停止慢查詢日誌引數 on set global show query log file 慢查詢日誌存放的位址和檔案 long query...

兩組資料的偏差怎麼算 如何衡量資料分布的差異程度?

假設一筆投資的回報情況是第一周盈利1元,第二週盈利10元,第三週盈利100元,那麼每週盈利的均值 1 10 100 3 37元。在這裡,均值體現的是收益率分布的中心在 但並沒有體現出收益率的分布差異程度。因此在衡量一組資料的分布情況時,不能只看資料的集中程度,為了量化該組資料中某一具體數值分布的精確...

mysql查詢兩個表之間的差集

需要查兩個表之間的差集 首先,想到的是主鍵直接not in select mailbox id from co user where mailbox id not in select mailbox id from core mailbox 好吧!這個是可以,但是資料多了的話,想到這個查詢的邏輯有點...