我有一个具有列开始时间和停止时间的表。将行拆分成表的多个行
例如
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