Как проверить дату истечения срока на запрос MySQL - PullRequest
5 голосов
/ 23 июня 2010

Вот моя текущая таблица MySQL

id  | file        |  expiry_date
---------------------------------------
1   | sample.zip  |  2010-02-03 11:07:03
2   | sample2.zip |  2010-07-13 11:07:03

Запрос:

SELECT * 
  FROM download 
 WHERE expiry_date` `how to validate here`

Я хочу проверить, если expiry_date истек, файл не может быть загружен.

Как это сделать?

Ответы [ 2 ]

8 голосов
/ 23 июня 2010
SELECT * FROM download WHERE expiry_date > CURRENT_TIMESTAMP

или

SELECT * FROM download WHERE expiry_date > NOW()
1 голос
/ 23 июня 2010

Вы должны учитывать одну проблему: в каком часовом поясе хранится ваша expiry_date относительно часового пояса вашего сервера mysql.Я использовал следующие решения:

SELECT * FROM `download` WHERE `expiry_date` > NOW();

Решение, однако, не обязательно дало мне правильный ответ, который я искал, поскольку функция NOW () локализована в часовом поясе сервера mysql.Если ваши expiry_dates не были отправлены на сервер, уже локализованный на вашем сервере с NOW (), вы получите неверное сравнение.

Во всех наших системах мы храним метки времени в базе данных, используя UTC.К сожалению, центр обработки данных, в котором мы размещаем, требует, чтобы серверы были локализованы в EST, что потенциально может испортить все наши сравнения.Решением было использовать функцию UTC_TIMESTAMP (), которая возвращает дату и время UTC без локализации.

SELECT * FROM `download` WHERE `expiry_date` > UTC_TIMESTAMP();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...