|
MySQL.RU - Webboard
Вернуться
TIME (интересный глюк) (Вик) 22/04/2002 - 11:09:38
From: Вик - 22/04/2002 - 11:09:38
Subject:TIME (интересный глюк)
-----------------
Привет, MySQL! :))
Ребята, скажите если кто знает - как сложить TIME+TIME (значение может быть положительным или отрицательным).
Есть ведь только DATE_ADD, нет чтоб и TIME_ADD сделать!!
Я конечно нашёл выход из положения, но мне он кажется кривым. Вот что приходится делать:
$sql = "
SELECT
SEC_TO_TIME(
TIME_TO_SEC('-08:00:00') +
TIME_TO_SEC('03:00:00')
)
FROM $tbl
";
Т.е. городить такую вот конструкцию. А может есть более простой способ? Может я просто не в курсе? Ни в одной книге не написано...
:(
Ещё прикол! По порядку:
В ячейке формата TIME (она может быть NULL) лежит отрицательное значение времени. Например, там лежит '-08:00:00'.
Поэкспериментируем на моей домашней машине (На WIN XP стоит perl, mysql, apache).
Например. Переведём это значение в секунды:
TIME_TO_SEC('-08:00:00');
Получается '-28800'
Или спросим:
IF('-08:00:00' < 0, 'minus', 'plus');
Получим 'minus'
А теперь переходим к моему провайдеру (Караван). У них там кажись FreeBSD, ну и пр. стандартный набор.
И по SSH (или из perl скриптов) спросим:
TIME_TO_SEC('-08:00:00');
Получается '28800'
Положительное значение!!! О-о-о-о! Ребята, это жуткий глюк.
Или скажем:
TIME_FORMAT('-08:00:00', '%H');
И на виндах дома, и на FreeBSD с последней версией мускуля мы получим:
mysql> select TIME_FORMAT('-08:00:00', '%H');
+--------------------------------+
| TIME_FORMAT('-08:00:00', '%H') |
+--------------------------------+
| 08 |
+--------------------------------+
1 row in set (0.00 sec)
Положительное значение!!! Но ведь у меня время-то отрицательное!
Что самое интересное, ячейка формата TIME допускает положительные и отрицательные значения от '-838:59:59' до '838:59:59'. Но какой с них толк, если я практически не могу работать с отрицательными значениями.
:((
Вообще, это у меня используется для преесчёта времени между городами с учётом UTC/GMT. UTC, понятное дело, может быть и положительным и отрицательным.
Чтобы сложить два простейших времени, и чтобы скрипты нормально работали и локально и у провайдера, пришлось нагородить аж:
$sql = "SELECT
SEC_TO_TIME(
IF(time1 < 0, -ABS(TIME_TO_SEC(time1)), TIME_TO_SEC(time1)) +
IF(time2 < 0, -ABS(TIME_TO_SEC(time2)), TIME_TO_SEC(time2))
)
FROM tbl
";
Ну почему нет команды типа:
TIME_ADD('-08:00:00', INTERVAL '03:00:00' HOUR_SECOND);
и все бы дела!
Эхх...........
:((
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
2671
|
|