#mysql
Вопрос:
добрый день!
Я хотел бы сгенерировать отчет, который будет отображаться так же, как на прилагаемой фотографии. Нажмите на этот пример фотографии
Я хотел бы разделить дату и время на Время в 7:00 утра, Тайм-аут (12:00 утра), Время в полдень (12:30 утра), Тайм-аут ((5:00 вечера) в запросе
До сих пор это то, что я получаю, только статическая дата, я не знаю, как сделать ее динамичной, используя только временной диапазон, Нажмите на пример фото 2. Надеюсь, вы сможете помочь. Спасибо.
select datetime,id,
(CASE WHEN datetime > '19/04/2021 6:30' AND datetime < '19/04/2021 8:30' THEN datetime ELSE NULL END) as TimeInAM,
(CASE WHEN datetime > '19/04/2021 11:30' AND datetime < '19/04/2021 12:30' THEN datetime ELSE NULL END) as TimeOutAM,
(CASE WHEN datetime > '19/04/2021 12:30' AND datetime < '19/04/2021 13:30'THEN datetime ELSE NULL END) as TimeInPM,
(CASE WHEN datetime > '19/04/2021 16:30' AND datetime < '19/04/2021 21:30'THEN datetime ELSE NULL END) as TimeOutPM
from time_attendances WHERE id = 1345
Комментарии:
1. Вам действительно не следует использовать sql для форматирования выходных данных, используйте для этой цели соответствующее программное обеспечение для создания отчетов!
2. Что касается вывода, я буду использовать Laravel. Я не знаю, подходит ли это приложение для использования. Я также думаю о MS Access, но я все еще в замешательстве.
Ответ №1:
Я предлагаю не использовать зарезервированные MySQL
слова, такие как datetime
: https://dev.mysql.com/doc/refman/8.0/en/keywords.html
Ты пытаешься сделать что-то подобное:
SELECT d,
if( DATE_FORMAT(d,'%r') between '06:30:00 AM' and '08:30:00 AM' , d, 'Null' ) as TimeInAM ,
if( DATE_FORMAT(d,'%r') between '11:30:00 AM' and '12:29:59 AM' , d, 'Null' ) as TimeOutAM ,
if( DATE_FORMAT(d,'%r') between '12:30:00 AM' and '01:30:00 PM' , d, 'Null' ) as TimeInPM ,
if( DATE_FORMAT(d,'%r') between '04:30:00 PM' and '09:30:00 AM' , d, 'Null' ) as TimeOutPM
from test ;
Демо: https://www.db-fiddle.com/f/7yUJcuMJPncBBnrExKbzYz/62
DATE_FORMAT(date_time,'%r')
дата возврата в 07:01:00 AM
09:30:00 PM
формате.
Проверьте, основываясь на ваших ценностях, и позвольте мне сейчас.
Редактировать:https://www.db-fiddle.com/f/7yUJcuMJPncBBnrExKbzYz/67
SELECT d,dayname(d) as week_day,
if( DATE_FORMAT(d,'%r') between '06:30:00 AM' and '08:30:00 AM' , DATE_FORMAT(d,"%h:%i %p"), 'Null' ) as TimeInAM ,
if( DATE_FORMAT(d,'%r') between '11:30:00 AM' and '12:29:59 AM' , DATE_FORMAT(d,"%h:%i %p"), 'Null' ) as TimeOutAM ,
if( DATE_FORMAT(d,'%r') between '12:30:00 AM' and '01:30:00 PM' , DATE_FORMAT(d,"%h:%i %p"), 'Null' ) as TimeInPM ,
if( DATE_FORMAT(d,'%r') between '04:30:00 PM' and '09:30:00 PM' , DATE_FORMAT(d,"%h:%i %p"), 'Null' ) as TimeOutPM
from test order by d desc ;
Комментарии:
1. Спасибо. Но возможно ли также вывести его таким образом? drive.google.com/file/d/1tfOU4mEHY8J_HjV4lLmf6AFgENgypc-5/… Присоединиться к ним, если у них одна и та же дата?
2. @RomneelBacon проверьте: db-fiddle.com/f/7yUJcuMJPncBBnrExKbzYz/66