Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL查询:日期>日期不工作_Php_Mysql_Sql_Date - Fatal编程技术网

Php MySQL查询:日期>日期不工作

Php MySQL查询:日期>日期不工作,php,mysql,sql,date,Php,Mysql,Sql,Date,你好,如果可以的话,请帮助我。这是我的塞纳里奥: 我有一个MySQL数据库,其中有一列以varchar的形式保存日期。日期格式如下:2014年5月29日,即d/m/Y 我试图将此列的值与todays date进行比较,并返回日期早于todays date的任何行 我使用一个php变量来存储今天的数据,如下所示: 以下是我的SQL查询: 归还什么 所以被退回的东西对我来说很不寻常。最后一天少于今天的所有记录。它似乎可以俯瞰月份和年份。换句话说,如果我最后一次看到的日期是2014年5月30日,而今天

你好,如果可以的话,请帮助我。这是我的塞纳里奥:

我有一个MySQL数据库,其中有一列以varchar的形式保存日期。日期格式如下:2014年5月29日,即d/m/Y

我试图将此列的值与todays date进行比较,并返回日期早于todays date的任何行

我使用一个php变量来存储今天的数据,如下所示:

以下是我的SQL查询:

归还什么

所以被退回的东西对我来说很不寻常。最后一天少于今天的所有记录。它似乎可以俯瞰月份和年份。换句话说,如果我最后一次看到的日期是2014年5月30日,而今天的日期是2014年5月29日,那么这个记录仍然会被返回

有人知道我可能做错了什么吗


谢谢

您需要将日期存储为数据库中的日期或日期时间

然后您可以使用:


从DATElast_seen您确实不应该在varchar字段中存储日期的患者中选择*使用日期或日期时间或时间戳数据类型

也就是说,有时您无法控制数据库,您必须处理其他人糟糕的设计决策。在本例中,要比较日期,请将varchar字符串转换为日期,并以这种方式进行比较。因此,在您的情况下,您可以有如下内容:

$date = date("d/m/Y");
然后

SELECT * FROM patients WHERE str_to_date('last_seen', '%d/%m/%Y') < str_to_date('$date', '%d/%m/%Y')

为什么要将日期存储在varchar字段中?所以要尝试对两个字符串进行不等比较?不要将日期存储在varchar中,SQL对此有一个日期/日期时间类型。如果将某个内容存储为文本字符串,它将作为文本字符串进行比较。非常感谢。举手,这是我糟糕的设计,我还在学习。由于数据库中只填充了一些测试记录,所以我能够将该列转换为datetime,而且效果很好。插入此列的当前日期的最佳方式是什么?是CURDATE还是CURRENT_DATE?@user711909无论哪种方式都可以-你都会得到相同的结果-我相信,在内部,一个调用另一个。
$date = date("d/m/Y");
SELECT * FROM patients WHERE str_to_date('last_seen', '%d/%m/%Y') < str_to_date('$date', '%d/%m/%Y')
SELECT * FROM patients WHERE date(last_seen) < current_date
SELECT * FROM patients WHERE str_to_date('last_seen', '%d/%m/%Y') < current_date