mysql - Sql 查询,未使用 CURDATE() 函数检索正确的值

标签 mysql sql

我需要从数据库中检索“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)

是因为日期格式的问题吗?

最佳答案

我的猜测是 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);

实际上,语义略有不同——但尚不清楚您真正的意图是什么。第一个版本“更好”,因为它可以更好地利用索引来提高性能。

关于mysql - Sql 查询,未使用 CURDATE() 函数检索正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48163780/

相关文章:

sql - 当项目是文本时,使用SQL从数据库对项目进行排序

mysql - 想要选择表的所有列,同时合并相似的列值

mysql - 如果我需要一个非常非常大的自动增量 ID 怎么办?

php - 如何在 MySQL 或 PHP 中将 32 位整数从无符号转换为有符号?

c# - 根据下拉选择 c# 填充 Listview

mysql - SQL "replace"语法问题

SQL:如何从一个表中选择另一个表中的不同值?

php - Doctrine DQL 子查询给出零结果

mysql - 获取多个条件下的多个计数

sql - 如何从聚合文本字段中解析和删除重复项