Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




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, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
2671



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |