繁体   English   中英

从mysql表中获取数据,其中一列包含字符串格式的日期并与今天的日期匹配

[英]Fetch data from mysql table where a column contains date in string format and matches with today's date

我收到了一位客户的任务,该客户希望对其正在进行的应用程序进行一些更改。 有一个称为用户的表,该表具有一个称为生日的字段。 以前的开发人员是一个白痴,他保存了生日varchar(255)而不是datetime 生日列中的数据保存为January 01, 1986

我想获取生日在当前日期的所有用户。

我尝试使用:

$query = "SELECT  * FROM users WHERE 
DAY(STR_TO_DATE(birthday, '%Y-%m-%d')) = '".date('d')."' 
AND MONTH(STR_TO_DATE(birthday, '%Y-%m-%d')) = '".date('m')."'";

但是它返回的是空数据集。 我怎样才能解决这个问题?

您的日期格式与您在问题中指定的日期格式不匹配。 我认为您正在寻找:

$query = "SELECT * FROM users WHERE 
DAY(STR_TO_DATE(birthday, '%M %d, %Y')) = '".date('d')."' 
AND MONTH(STR_TO_DATE(birthday, '%M %d, %Y')) = '".date('m')."'";

我解决了,意识到自己做错了:

$query = "SELECT * FROM users 
           WHERE DAY(date_format(str_to_date( birthday, '%M %d, %Y' ), '%Y-%m-%d' )) = '".date('d')."'
          AND MONTH(date_format(str_to_date( birthday, '%M %d, %Y' ), '%Y-%m-%d' )) = '".date('m')."'";

首先,我们需要将生日从字符串转换为兼容日期,然后将其格式化为实际日期。

我将用数据库使用的相同格式将今天的日期呈现为字符串,然后搜索该确切的字符串。 至少以这种方式,如果对字段建立索引,您将获得索引的好处。 (或者应该添加一个。)按原样查询,您将始终必须进行顺序扫描。

$today = date('F d, Y');
$sql = 'SELECT * FROM users WHERE birthday = :today';

另外,通过mysqliPDO使用带有绑定参数的准备好的语句。 这篇文章有一些很好的例子。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM