четверг, 19 февраля 2009 г.

MySQL: TO_DAYS()

Результат работы функции MySQL TO_DAYS() от неправильной даты = NULL:

mysql> SELECT TO_DAYS('0000-00-00');
NULL

и соответственно, пытаясь посчитать количество дней с указанной даты(или любое другое вычисление с датами) получим ошибку:

mysql> SELECT TO_DAYS(NOW()) - TO_DAYS('0000-00-00');
NULL

Как вариант можно использовать UNIX_TIMESTAMP:

mysql> SELECT (UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP('0000-00-00'))/86400;
14284.81

7 комментариев:

  1. не вижу никакого смысла в запросе. откуда вообще может взяться "неправильная" дата в запросе sql? и NULL - это не ошибка.
    ваше решение выглядит так: если дата неправильная, то вычислять количество дней с января 1970 года. и какой в этом смысл? а если надо будет с 1965 года вычислить?
    если так уж надо, можно использовать SELECT TO_DAYS(NOW()) - IFNULL(TO_DAYS('0000-00-00'), 0);
    смысла столько же, только в любом случае число будет возвращать, и считать можно с нулевого года (с 1582 корректно).

    в бомжеленту вообще бред ушел про високосный год, хорошо хоть поняли и потерли

    ОтветитьУдалить
  2. что за хуйню вы тут пишете, где палево тем, где интересные статьи...хуета блядь одна, ролики засратые да кому они нужны, и ваще где тема про поддомен и склейку, неужели додумались удалить...

    ОтветитьУдалить
  3. ты уебок анонимный хорош срать в моем посте, я первый тут начал срать. ПОСТ ХУЙНЯ. АФТАР ЕБЛАН.

    ОтветитьУдалить
  4. MeG, предположим, в таблицу заносится дата регистрации пользователя. По тем или иным причинам произошёл сбой, и записалась пустая переменная, т.е. значение ‘NULL’ или ‘0000-00-00’, в зависимости от того, как описана ячейка даты.
    Предположим, нам надо выбрать всех пользователей, зарегистрированных более 10-и суток, запрос вида:

    select users from ... where to_days(now()) - to_days(data_registracii) > 10;

    не выведет пользователя, при регистрации которого "сбойнула" дата.

    Я хотел ограничиться подачей информации объёмом необходимым и достаточным, чтобы "кто в теме" - приняли к сведению. Понятное дело, если диапазон дат подразумевает даты до начала UNIX эры, надо делать по-другому.

    Високосный год - это тем более не бред, потёр, т.к. знал, что сказав "А", надо будет пояснять детально, что было влом. К сожалению, большинство "программистов", не имеют понятия о таких фичах, например, в языке Perl, установленном на миллионах серверах мира, расстояние между датами не учитывает високосные года и неточность может ой как дорого стоить.

    ОтветитьУдалить
  5. бля хуйня хуйней ебать

    ОтветитьУдалить
  6. Анонимный15 июня, 2009 22:38

    Статья говно
    Да и сайт тоже

    ОтветитьУдалить

Внимание! Все ссылки проходят фейс контроль. Все ссылки REL=NOFOLLOW. Удаляются все комментарии, кроме: анонимных или с ссылками на личные финансовые блоги.