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 好吧!這個是可以,但是資料多了的話,想到這個查詢的邏輯有點...