我有一个表有列开始时间和停止时间。
例如
Start time Stop Time
2014-01-01 23:43:00 2014-01-02 03:33:00
我需要分成2014-01-01 23:43:00 - 2014-01-02 00:00:00和2014-01-02 00:00:00 - 2014-01-02 03: 33:00作为两个单独的行。
答案 0 :(得分: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
表格Records
表格的每一行都有2行,其中一行包含starttime
,另一行包含stoptime
。表格t
的每一行还包含type
。为starttime
键入1,为stoptime
键入2。然后CASE
语句将用于生成您所需的数据。
答案 1 :(得分: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