| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MySQL > Как вычитать дату? |
| Автор: dm9 27.12.2005, 16:28 | ||||
| Есть столбец с типом DATETIME или TIMESTAMP(14). Надо найти все строки, в которых данная отметка времени - не ранее, чем за 12 минут до NOW(). Под 4.0.25 всё прекрасно работало таким образом:
и таким тоже
Под 4.1.14 это не работает. Вопрос - как же правильно найти расстояние между датами. Хранить дату как int - не предлагать. |
| Автор: Akina 27.12.2005, 16:50 |
| SubTime, TimeDiff... мануалы-то читаем? |
| Автор: dm9 27.12.2005, 17:18 | ||
Akina, а можно мне, как ОЧЕНЬ большому тормозу, примерчик на тему
? |
| Автор: Illuminaty 28.12.2005, 00:35 | ||
Попробуй так
`lastrequest` - это же поле для хранения времени у тебя? ЗЫ У меня на MySQL 4.1.8 работает. |
| Автор: sergejzr 28.12.2005, 00:47 | ||||
Если PHP то ябы сделал:
Ну и потом
|
| Автор: Illuminaty 28.12.2005, 00:48 | ||
А лучше так сделать
доплнительно можно посмотреть http://dev.mysql.com/doc/refman/4.0/ru/date-and-time-functions.html |
| Автор: Illuminaty 28.12.2005, 00:59 | ||||||||
sergej.z, при всем уважении, но этот код не то что надо
|
| Автор: sergejzr 28.12.2005, 01:01 |
| Да я уже иправил. Неправильно прочитал условие, показалось 12 сек. |
| Автор: dm9 28.12.2005, 12:40 | ||||||||||
| Тестируем. Первый вариант.
Путь будет не NOW(), а другой столбец. Назовём его r9.
r9 = '2006-12-27 16:00:00' lastrequest = '2006-12-27 15:59:57' result = '-59' Далеко от требуемого результата, не так ли? Второй вариант.
r9 = '2006-12-27 16:00:00' lastrequest = '2006-12-27 15:59:57' result = '40'
Сергей, очень хотелось бы сделать это средствами СУБД. Иначе получается некрасиво как-то. Но пусть даже будет так. Что возвращает time()? Он возвращает не TIMESTAMP, он возвращает число секунд от начала эпохи. А TIMESTAMP - это число в формате 20051228000000 - то есть это не секунды. Твой код работать не будет тоже. |
| Автор: Illuminaty 28.12.2005, 13:18 | ||
попробуй так
а в предыдущих ответах я свою ошибку понял |
| Автор: dm9 28.12.2005, 14:37 |
| Хм. Да, это будет работать для фиксированного числа минут/секунд, спасибо. Но что, если эти "12 минут" у меня хранятся в другом столбце БД в формате '0000-00-00 00:12:00'? Насколько я понял, ADDDATE() такого не поддерживает. Это вообще возможно под MySQL 4.1? Под 4.0.25 всё работало Добавлено @ 14:36 Я, кажется, понял. Формат `0000-00-00 00:12:00` считается некорректным. "12 минут" буду хранить в БД как строковое поле interv в формате 'DAYS HOURS:MINUTES', а затем делать так: WHERE DATE_ADD(lastrequest, INTERVAL interv DAY_MINUTE) > r9 Наверное, это решение задачи. |