Мне нужно получить записи из базы данных, где мое значение dateOfTermination равно сегодняшней дате. Я использовал приведенный ниже запрос, но он не будет показывать никаких результатов.
select * from user
where CRM_Status='pending' and dateOfTermination = DATE_ADD(CURDATE(), INTERVAL 1 DAY)
Он будет работать, только если запрос указан ниже.
select * from user
where CRM_Status='pending' and dateOfTermination < DATE_ADD(CURDATE(), INTERVAL 1 DAY)
Это из-за проблемы в формате даты?
Предполагая, что время - проблема. Почему бы просто не упростить это?
выберите * от пользователя, где CRM_Status = 'pending' и cast (dateOfTermination as date) = cast (GETDATE() как DATE)
Вы можете использовать функцию MySQL DATE_FORMAT, чтобы получить дату без компонента времени, а затем выполнить сравнение. Таким образом, запрос должен выглядеть так:
SELECT * FROM user
WHERE CRM_Status='pending' AND
DATE_FORMAT(dateOfTermination,'%d-%m-%Y')=DATE_FORMAT(DATE_ADD(CURDATE(),INTERVAL 1 DAY),'%d-%m-%Y');
Я предполагаю, что dateOfTermination
имеет компонент времени. Попробуй это:
select u.*
from user u
where u.CRM_Status = 'pending' and
u.dateOfTermination >= CURDATE() AND
u.dateOfTermination < DATE_ADD(CURDATE(), INTERVAL 1 DAY);
Вы также можете выразить это как:
select u.*
from user u
where u.CRM_Status = 'pending' and
DATE(u.dateOfTermination) = DATE_ADD(CURDATE(), INTERVAL 1 DAY);
Собственно, семантика немного отличается - но непонятно, что вы действительно намереваетесь. Первая версия "лучше" в том смысле, что она может лучше использовать индексы для производительности.