Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.09.2016, 16:28   #1
hudgehog
 
Регистрация: 01.06.2015
Сообщений: 6
По умолчанию SQL изменить тип данных при запросе

Здрасьте! У меня такой вопрос - я делаю выборку данных из базы типа time. Эти данные нужно суммировать и вывести на странице через php. То есть я делаю запрос в секундах, суммирую, а потом простым делением перевожу в часы, минуты и сек.
sec_to_time значение больше 838:59:59 не выводит. Как сумма получается 716800:41:-16.
В базе есть ещё один столбец со временем, там оно значительно меньше, так вот там таких проблем нет - все считается верно. Я так понимаю, с таким количеством часов мой метод не прокатывает. Перевожу так
PHP код:
$sum_end_time=sprintf("%d:%02d:%02d"floor($sum_time 3600), (($sum_time 60) % 60), ($sum_time 60)); 
Мне повстречался метод cast, преобразовать на ходу time в double, например, но и это не проходит.
PHP код:
$query="select id, sum(time_to_sec(time)) from BD where cast(time as double) ....бла-бла 
Метод тыка не помог. Как поправить ситуацию?
hudgehog вне форума Ответить с цитированием
Старый 22.09.2016, 16:41   #2
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

а зачем все эти переводы?
come-on вне форума Ответить с цитированием
Старый 23.09.2016, 08:46   #3
hudgehog
 
Регистрация: 01.06.2015
Сообщений: 6
По умолчанию

ну, а как иначе?
hudgehog вне форума Ответить с цитированием
Старый 23.09.2016, 09:46   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от hudgehog Посмотреть сообщение
ну, а как иначе?
простите, а что у Вас хранится в поле time и какого оно типа?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.09.2016, 10:08   #5
hudgehog
 
Регистрация: 01.06.2015
Сообщений: 6
По умолчанию

time - это и есть тип поля. Само поле так же, наверное, тут обозвала, ибо название оооочень длинное. Перевожу в секунды, т.к. формат _:_:_ складывается весьма криво, а мне бы хотелось поточнее.
hudgehog вне форума Ответить с цитированием
Старый 23.09.2016, 11:29   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

"косячит" PHP

попробуйте такой код:
Код:

$sum_time = 25400744000; // <----- это ваша переменная из БД, эту строчку удалите!

$sum_d = floor($sum_time/3600);
$sum_h = floor(($sum_time - $sum_d*3600)/60);
$sum_m = $sum_time - $sum_d*3600 - $sum_h*60;

$sum_end_time_fix=$sum_d.":".$sum_h.":".$sum_m;


// выведем полученные значения (для отладки)
echo "sum_time = $sum_time<br>\n";
echo "sum_end_time_fix = $sum_end_time_fix<br>\n";

Последний раз редактировалось Serge_Bliznykov; 23.09.2016 в 11:45.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.09.2016, 15:09   #7
hudgehog
 
Регистрация: 01.06.2015
Сообщений: 6
По умолчанию

Хм, минусы пропали - уже хорошо. Но на вскидку сейчас сумма 719701:16:24, это общее время по отделам, но если выводить хотя бы примерно время по одному какому-нибудь, то уже получается 1000000 ч. Но это скорее мой косяк - надо копнуть. Спасибо тебе огромное!
hudgehog вне форума Ответить с цитированием
Старый 23.09.2016, 15:48   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

не за что, обращайтесь.

Цитата:
но если выводить хотя бы примерно время по одному какому-нибудь, то уже получается 1000000 ч.
скорее всего в запросе ошибка. если в запросе несколько таблиц, то проверьте, что корректно указаны поля, связывающие эти две таблицы и идентифицирующие записи.

а если не секрет, для чего это всё?
ну вот, допустим, получили Вы 719701 часов. И что с этим делать? Разделить на количество сотрудников и получить среднее число часов по каждому?
Или разделить на 8 часов и получить общее усреднённое число дней?
Какова конечная цель? Просто статистика? Отчёт какой-то безумный собираете?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.09.2016, 16:48   #9
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,149
По умолчанию

а как же родные средства MySQL всякие DATE_FORMAT, TIME_FORMAT ?
ADSoft вне форума Ответить с цитированием
Старый 23.09.2016, 17:06   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Там же ограничение у sec_to_time - все что выше усекается до 838:59:59
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
InterBase.SQL.Ошибка при запросе к бд. athleet БД в Delphi 3 09.04.2012 19:58
с++ ошибка при SQL запросе lblondy Помощь студентам 0 07.03.2012 19:20
В Access есть тип данных "Счетчик".Есть ли подобный тип данных в MS Sql Server 2000? An_ton SQL, базы данных 5 16.01.2009 17:55
Ошибка при запросе SQL в IB Алекс1 БД в Delphi 2 24.06.2007 22:37