2014-03-12 159 views
1

我有一個具有列開始時間和停止時間的表。將行拆分成表的多個行

例如

Start time   Stop Time 
2014-01-01 23:43:00 2014-01-02 03:33:00 

這我需要在分裂到2014年1月1日23點43分零零秒 - 2014年1月2日00:00:00和2014年1月2日00:00 :00 - 2014-01-02 03:33:00作爲兩個單獨的行。

+1

您希望爲所有行完成此操作,還是僅針對那些開始時間和停止時間與上述數據不同的日期的行? –

+0

我需要它的所有行! – DJo

+1

最後一次劃分是否正確?你想從停止時間減去一天嗎? – Mihai

回答

0
select 
    if (temp.row_n=1,t.start_time,t.stop_time) as time 
from mytable t, 
    (select 1 as row_n 
     union 
     select 2 as row_n) temp 
+0

執行後出現錯誤ERROR:function if(布爾型,沒有時區的時間戳,沒有時區的時間戳)不存在 提示:沒有函數匹配給定的名稱和參數類型。您可能需要添加明確的類型轉換。 ' – DJo

+0

@dhanishjose你添加了mysql標籤,但顯然這是另一個分區 – StanislavL

1

可以打破兩列到各行,然後使用CASE語句,就像這樣:

select 
    CASE WHEN t.timetype=1 THEN mytime 
     WHEN t.timetype=2 THEN CONCAT(DATE(mytime), ' 00:00:00') 
    END as starttime, 
    CASE WHEN t.timetype=1 THEN CONCAT(DATE_ADD(DATE(mytime), INTERVAL 1 DAY), ' 00:00:00') 
     WHEN t.timetype=2 THEN mytime 
    END as stoptime 
from (
    select starttime as mytime, 1 as timetype from record 
    union 
    select stoptime as mytime, 2 as timetype from record 
) t 

工作演示http://sqlfiddle.com/#!2/7ef31/30

這裏表t將有2你的Records表的每一行的行,一行將包含starttime,而另一行將包含stoptime 。表t的每一行還將包含一個type。類型1爲starttime,類型2爲stoptime。然後CASE聲明將用於生成您所需的數據。

+0

你已經共享的上述腳本只能在我提到的exampled中工作,可以有一些情況,開始和結束日期的差異從1天,2天,3天......等等(假設最大差異爲10天)。 – DJo

+0

請檢查[**這個**](http://stackoverflow.com/questions/22398982/split-single-row-into-multiple-rows-in-sql)我讓我的需求更復雜。 – DJo