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

时间:2018-04-03 17:32:19

标签: php mysql

我收到了一位客户的任务,他希望对正在进行的申请进行一些更改。有一个名为users的表,其中有一个名为birthdate的字段。之前的开发人员是一位拯救生日{0}}而不是varchar(255)的白痴。生日列中的数据保存为datetime

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

我试图使用:

January 01, 1986

但它返回空数据集。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

您的日期格式与您在问题中指定的日期格式不符。我想你正在寻找:

$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')."'";

答案 1 :(得分:0)

我解决了问题并意识到我做错了什么: -

$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')."'";

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

答案 2 :(得分:0)

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

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

此外,通过mysqliPDO使用带有绑定参数的预准备语句。 This post有一些很好的例子。