Второй аргумент предложения WHERE не работает - PullRequest
0 голосов
/ 28 октября 2018

Я сбит с толку, я не могу понять, почему эта простая вещь не работает.

SELECT id
FROM users
WHERE (DATE_FORMAT((birthday),'%m') = DATE_FORMAT(NOW(),'%m'))

Так что это приносит мне идентификаторы пользователей, чей день рождения в текущем месяце.Теперь, если я добавлю «AND active = 1» после предложения date_format, он перестанет работать, принесет мне ноль строк, и действительно есть пользователи, которые отвечают требованиям, так что не так с:

SELECT id
FROM users
WHERE (DATE_FORMAT((birthday),'%m') = DATE_FORMAT(NOW(),'%m')) AND active = 1

1 Ответ

0 голосов
/ 28 октября 2018

Использование DATE_FORMAT неэффективно, так как сначала преобразует значения в строку.Вместо этого используйте MONTH().Я также подозреваю, что некоторое поведение DATE_FORMAT является причиной вашего запроса.

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

SELECT
    id
FROM
    users
WHERE
    active = 1
    AND
    birthday IS NOT NULL
    AND
    MONTH( NOW() ) = MONTH( birthday )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...