2016-11-25 15 views
5

Tôi có tham số phạm vi ngày, cần phải chia thành nhiều ngày và mỗi tham số sẽ có cùng thời gian với tham số.Cách thêm thời gian cho đến ngày

Bạn không chắc chắn vấn đề với ADDTIME là gì, có thể Im thiếu một diễn viên? Tôi có thể giải quyết nó đúc thành chuỗi và concat nhưng tôi đoán nên được dễ dàng hơn.

Output Current

selectDate time(@s_date) time(@e_date) addtime(date(a.selectDate), time(@s_date)) 
1 2016-09-03 08:00:00  16:00:00  08:00:00 
2 2016-09-04 08:00:00  16:00:00  08:00:00 

Desire Output

selectDate time(@s_date) time(@e_date) addtime(date(a.selectDate), time(@s_date)) 
1 2016-09-03 08:00:00  16:00:00  2016-09-03 08:00:00 
2 2016-09-04 08:00:00  16:00:00  2016-09-04 08:00:00 

Có thể giải pháp:

CONCAT(DATE_FORMAT(a.selectDate, '%Y-%m-%d '), 
     DATE_FORMAT(@s_date, '%H:%i:%s')) as start_time, 

tôi b ig query

select a.selectDate, 
     time(@s_date), 
     time(@e_date), 
     addtime(date(a.selectDate), time(@s_date)) 

from (
    select '1900-01-01' + INTERVAL (a.a + (10 * b.a) + (100 * c.a) + (1000 * d.a) + (10000 * e.a)) DAY as selectDate 
    from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a 
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b 
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c 
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as d 
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as e 
) a 
CROSS JOIN (SELECT @s_date := '2016-09-03 08:00:00', @e_date := '2016-09-04 16:00:00') par 
WHERE selectDate BETWEEN date(@s_date) 
        AND date(@e_date) 
+0

Hãy thử như dàn diễn viên này .Chọn (concat (selectdate,'', thời gian) làm datetime). –

+0

Thanks @PrasannaKumarJ Bạn nói đúng là đơn giản hơn. Vẫn tự hỏi tại sao có thể thêm thời gian sử dụng. –

Trả lời

1
select a.selectDate, 
     time(@s_date), 
     time(@e_date), 
     addtime(concat(a.selectDate,' ','00:00:00'),time(@s_date)) 

from (
    select '1900-01-01' + INTERVAL (a.a + (10 * b.a) + (100 * c.a) + (1000 * d.a) + (10000 * e.a)) DAY as selectDate 
    from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a 
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b 
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c 
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as d 
    cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as e 
) a 
CROSS JOIN (SELECT @s_date := '2016-09-03 08:00:00', @e_date := '2016-09-04 16:00:00') par 
WHERE selectDate BETWEEN date(@s_date) 
        AND date(@e_date) 

tham khảo this link

Các vấn đề liên quan