将行拆分为表的多行

时间:2014-03-12 09:32:28

标签: mysql sql

我有一个表有列开始时间和停止时间。

例如

 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作为两个单独的行。

2 个答案:

答案 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