Значение запроса со следующего месяца не возвращает никакого значения?

#php #mysql #sql

#php #mysql #sql

Вопрос:

В настоящее время я использую это для запроса значения следующего месяца:

 if($stmt = $link->prepare("
  SELECT SUM(prov) as sum
  FROM tbl
  WHERE MONTH(transfer) = MONTH(CURRENT_DATE()) 1
    AND YEAR(transfer) = YEAR(CURRENT_DATE())
")) {
 

Проблема в том, что он не дает мне значения с января 2021 года. Я попробовал приведенный ниже код, но значение по-прежнему не возвращается:

 if($stmt = $link->prepare("
  SELECT SUM(prov) as sum
  FROM tbl
  WHERE MONTH(transfer) = MONTH(CURRENT_DATE()) 1
    AND YEAR(transfer) = YEAR(CURRENT_DATE()) 1
")) {
 

Пример значения передачи: 2021-01-01 .

Комментарии:

1. Пометьте свой вопрос базой данных, которую вы используете.

2. @GordonLinoff Готово! phpMyAdmin.

3. Вы можете легко понять, в чем проблема, если полностью удалите свое WHERE предложение и поместите все эти вычисления в SELECT список. Таким образом, вы можете наблюдать вычисленные значения и определять, как они должны влиять на результат. Затем вы обнаружите, что MONTH(CURRENT_DATE()) 1 возвращает 13, поэтому такого месяца не существует. Также month = month 1 and year = year 1 фактически не в следующем месяце, это следующий месяц следующего года, кроме декабря.

Ответ №1:

Вы можете использовать функции date / datetime:

 SELECT SUM(prov) as sum
FROM tbl
WHERE transfer >= DATE(CONCAT_WS('-', YEAR(NOW()), MONTH(NOW()), 1 )   INTERVAL 1 MONTH AND
      transfer < DATE(CONCAT_WS('-', YEAR(NOW()), MONTH(NOW()), 1 )   INTERVAL 2 MONTH;
 

Этот запрос сформулирован так, что он может использовать индекс on transfer .