我有一個具有列開始時間和停止時間的表。將行拆分成表的多個行
例如
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作爲兩個單獨的行。
我有一個具有列開始時間和停止時間的表。將行拆分成表的多個行
例如
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作爲兩個單獨的行。
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
執行後出現錯誤ERROR:function if(布爾型,沒有時區的時間戳,沒有時區的時間戳)不存在 提示:沒有函數匹配給定的名稱和參數類型。您可能需要添加明確的類型轉換。 ' – DJo
@dhanishjose你添加了mysql標籤,但顯然這是另一個分區 – StanislavL
可以打破兩列到各行,然後使用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
聲明將用於生成您所需的數據。
您希望爲所有行完成此操作,還是僅針對那些開始時間和停止時間與上述數據不同的日期的行? –
我需要它的所有行! – DJo
最後一次劃分是否正確?你想從停止時間減去一天嗎? – Mihai