Как я могу удалить строки, где их отметка времени старше, чем сейчас? - PullRequest
0 голосов
/ 13 мая 2019

Обычно я заполняю строку временной меткой => 1558180800, например.Я хочу удалить все строки, чья временная метка больше текущей, текущая временная метка.

Я пробовал несколько вещей, но не работал: /

Один пример запроса, который я пробовал:

DELETE FROM roompasswords WHERE timestamp > NOW()

Ответы [ 3 ]

0 голосов
/ 13 мая 2019

Попробуйте это:

DELETE FROM TABLE_NAME WHERE str_to_date(YOUR_FIELD, '%d/%m/%Y') > CURRENT_TIMESTAMP;

Просто измените формат str_to_date соответственно.

Также взгляните на эту статью: https://www.quora.com/I-have-a-date-column-in-varchar-format-How-can-i-change-it-to-date-format-in-mysql-workbench

Итак, что вы будете здесь делать, так это навести на свой столбец varchar, тогда вам не нужно менять таблицу. Но лучше всего иметь столбец DateTime для значений даты.

0 голосов
/ 14 мая 2019

Исходя из вашего примера, timestamp значение '1558180800' имеет формат UNIX_TIMESTAMP.NOW() возвращает «ГГГГ-ММ-ДД чч: мм: сс».Так что, если напрямую перевести ваш запрос:

DELETE FROM roompasswords WHERE timestamp > NOW();
is equivalent to
DELETE FROM roompasswords WHERE timestamp > '2019-05-14 09:18:06';

Так что это не сработает, учитывая, что он не может найти это конкретное значение поля.Поэтому вам нужно изменить NOW() на UNIX_TIMESTAMP.Ниже приведен пример, который вы можете попробовать:

1) DELETE FROM roompasswords WHERE timestamp > UNIX_TIMESTAMP(NOW());

Обратите внимание, что NOW () возвращает текущую дату + время, поэтому, если вы также хотите указать время, вы можете сделать следующее:

2) DELETE FROM roompasswords WHERE timestamp > UNIX_TIMESTAMP('2019-05-14 00:00:00');

ИЛИ вы можете сначала получить значение UNIX_TIMESTAMP, а затем использовать его для запроса DELETE:

  SELECT UNIX_TIMESTAMP('2019-05-14 00:00:00'); -- will return '1557763200'
  -- then
  DELETE FROM roompasswords WHERE timestamp > '1557763200';

Наконец, этот запрос также будет работать:

 3) DELETE FROM roompasswords WHERE FROM_UNIXTIME(TIMESTAMP) > '2019-05-14 00:00:00';
    or
    DELETE FROM roompasswords WHERE FROM_UNIXTIME(TIMESTAMP) > NOW();
0 голосов
/ 13 мая 2019

DELETE FROM TABLE_NAME WHERE timestamp_field > CURRENT_TIMESTAMP;

...