第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

獲取兩個(gè)日期之間的日期列表

獲取兩個(gè)日期之間的日期列表

獲取兩個(gè)日期之間的日期列表使用標(biāo)準(zhǔn)的MySQL函數(shù)可以編寫一個(gè)查詢,該查詢將返回兩個(gè)日期之間的天數(shù)列表。給定2009-01-01和2009-01-13,它將返回一個(gè)列表,其值為: 2009-01-01   2009-01-02   2009-01-03  2009-01-04   2009-01-05  2009-01-06  2009-01-07  2009-01-08   2009-01-09  2009-01-10  2009-01-11  2009-01-12  2009-01-13編輯:看來我還不清楚。我想生成這個(gè)列表。我的值存儲(chǔ)在數(shù)據(jù)庫(kù)中(按日期時(shí)間),但希望將它們聚集在左側(cè)的外部聯(lián)接中,如上面所示,將它們聚合到一個(gè)日期列表中(我在某些連接的右側(cè)期望NULL為NULL,并將處理此值)。
查看完整描述

3 回答

?
搖曳的薔薇

TA貢獻(xiàn)1793條經(jīng)驗(yàn) 獲得超6個(gè)贊

我將使用這個(gè)存儲(chǔ)過程將所需的時(shí)間間隔生成到名為時(shí)間間隔,然后使用temp連接和聚合數(shù)據(jù)表。時(shí)間間隔桌子。

該過程可以生成在其中指定的所有不同類型的間隔:

call make_intervals('2009-01-01 00:00:00','2009-01-10 00:00:00',1,'DAY').select * from time_intervals  
.interval_start      interval_end        
------------------- ------------------- 2009-01-01 00:00:00 2009-01-01 23:59:59 2009-01-02 00:00:00 2009-01-02 23:59:59 2009-01-03 00:00
:00 2009-01-03 23:59:59 2009-01-04 00:00:00 2009-01-04 23:59:59 2009-01-05 00:00:00 2009-01-05 23:59:59 2009-01-06 00:00:00 2009-01-06 23
:59:59 2009-01-07 00:00:00 2009-01-07 23:59:59 2009-01-08 00:00:00 2009-01-08 23:59:59 2009-01-09 00:00:00 2009-01-09 23:59:59 .call make_i
ntervals('2009-01-01 00:00:00','2009-01-01 02:00:00',10,'MINUTE'). select * from time_intervals.  interval_start      interval_end        
------------------- ------------------- 2009-01-01 00:00:00 2009-01-01 00:09:59 2009-01-01 00:10:00 2009-01-01 00:19:59 2009-01-01 00:
20:00 2009-01-01 00:29:59 2009-01-01 00:30:00 2009-01-01 00:39:59 2009-01-01 00:40:00 2009-01-01 00:49:59 2009-01-01 00:50:00 2009-01-0
1 00:59:59 2009-01-01 01:00:00 2009-01-01 01:09:59 2009-01-01 01:10:00 2009-01-01 01:19:59 2009-01-01 01:20:00 2009-01-01 01:29:59 2009-
01-01 01:30:00 2009-01-01 01:39:59 2009-01-01 01:40:00 2009-01-01 01:49:59 2009-01-01 01:50:00 2009-01-01 01:59:59 .I specified an interval_st
art and interval_end so you can aggregate the 
data timestamps with a "between interval_start and interval_end" type of JOIN..Code for the proc:.-- drop procedure make_intervals.CREATE 
PROCEDURE make_intervals(startdate timestamp, enddate timestamp, intval integer, unitval varchar(10))
BEGIN-- *************************************************************************-- Procedure: make_intervals()--   
 Author: Ron Savage--      Date: 02/03/2009---- Description:-- This procedure creates a temporary table named time_intervals 
 with the-- interval_start and interval_end fields specifed from the startdate and-- enddate arguments, at intervals of intval (un
 
 itval) size.-- *************************************************************************
   declare thisDate timestamp;
   declare nextDate timestamp;
   set thisDate = startdate;

   -- *************************************************************************
   -- Drop / create the temp table
   -- *************************************************************************
   drop temporary table if exists time_intervals;
   create temporary table if not exists time_intervals      (
      interval_start timestamp,
      interval_end timestamp      );

   -- *************************************************************************
   -- Loop through the startdate adding each intval interval until enddate
   -- *************************************************************************
   repeat      select
         case unitval            when 'MICROSECOND' then timestampadd(MICROSECOND, intval, thisDate)
            when 'SECOND'      then timestampadd(SECOND, intval, thisDate)
            when 'MINUTE'      then timestampadd(MINUTE, intval, thisDate)
            when 'HOUR'        then timestampadd(HOUR, intval, thisDate)
            when 'DAY'         then timestampadd(DAY, intval, thisDate)
            when 'WEEK'        then timestampadd(WEEK, intval, thisDate)
            when 'MONTH'       then timestampadd(MONTH, intval, thisDate)
            when 'QUARTER'     then timestampadd(QUARTER, intval, thisDate)
            when 'YEAR'        then timestampadd(YEAR, intval, thisDate)
         end into nextDate;

      insert into time_intervals select thisDate, timestampadd(MICROSECOND, -1, nextDate);
      set thisDate = nextDate;
   until thisDate >= enddate   end repeat;

 END;

的底部有類似的示例數(shù)據(jù)場(chǎng)景。這個(gè)職位,其中我為SQLServer構(gòu)建了一個(gè)類似的函數(shù)。


查看完整回答
反對(duì) 回復(fù) 2019-06-15
?
小唯快跑啊

TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(gè)贊

對(duì)于MSSQL,可以使用此方法。非??臁?/trans>

您可以將其封裝在表值函數(shù)或存儲(chǔ)的proc中,并以變量的形式解析開始日期和結(jié)束日期。

DECLARE @startDate DATETIMEDECLARE @endDate DATETIMESET @startDate = '2011-01-01'SET @endDate = '2011-01-31';WITH dates(Date) AS (
    SELECT @startdate as Date    UNION ALL
    SELECT DATEADD(d,1,[Date])
    FROM dates 
    WHERE DATE < @enddate)SELECT DateFROM datesOPTION (MAXRECURSION 0)GO


查看完整回答
反對(duì) 回復(fù) 2019-06-15
?
慕田峪7331174

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超13個(gè)贊

我們對(duì)BIRT報(bào)告也有類似的問題,因?yàn)槲覀兿雸?bào)告那些沒有數(shù)據(jù)的日子。由于這些日期沒有條目,所以最簡(jiǎn)單的解決方案是創(chuàng)建一個(gè)簡(jiǎn)單的表,存儲(chǔ)所有日期,并使用該表獲取范圍或聯(lián)接以獲得該日期的零值。

我們有一個(gè)每個(gè)月運(yùn)行的任務(wù),以確保表在未來5年內(nèi)被填充。表是這樣創(chuàng)建的:

create table all_dates (
    dt date primary key);

毫無疑問,對(duì)于不同的DBMS,有一些不可思議的方法可以實(shí)現(xiàn)這一點(diǎn),但是我們總是選擇最簡(jiǎn)單的解決方案。表的存儲(chǔ)需求很小,這使得查詢更加簡(jiǎn)單和可移植。從性能角度看,這種解決方案幾乎總是更好,因?yàn)樗恍枰獙?duì)數(shù)據(jù)進(jìn)行逐行計(jì)算。

另一個(gè)選項(xiàng)(我們以前使用過)是確保每個(gè)日期的表中都有一個(gè)條目。我們定期掃描表,并為不存在的日期和/或時(shí)間添加零項(xiàng)。在您的情況下,這可能不是一個(gè)選項(xiàng),它取決于存儲(chǔ)的數(shù)據(jù)。

如果你真的我覺得這是個(gè)麻煩all_dates表填充后,存儲(chǔ)過程將返回包含這些日期的數(shù)據(jù)集。這幾乎肯定會(huì)慢一些,因?yàn)槊看握{(diào)用它時(shí)都要計(jì)算范圍,而不是僅僅從表中提取預(yù)先計(jì)算出來的數(shù)據(jù)。

但是,老實(shí)說,您可以在1000年內(nèi)填充該表,而不會(huì)出現(xiàn)任何嚴(yán)重的數(shù)據(jù)存儲(chǔ)問題-比如365,000個(gè)16字節(jié)(例如)日期-再加上一個(gè)與日期重復(fù)的索引加上20%的安全開銷,我估計(jì)大約為1400萬(365,000*16*2*1.2=14,016,000字節(jié)),這是事物方案中的一個(gè)極小的表。


查看完整回答
反對(duì) 回復(fù) 2019-06-15
  • 3 回答
  • 0 關(guān)注
  • 744 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)