我在MYSQL中有一个列存储日期时间,如下所示:
2017-08-18 08:59:53
2017-08-18 07:59:00
我可以搜索数据库并在datetime列之间返回结果,如下所示:
$from = date("Y-m-d H:i:s", strtotime($_GET['from']));
$to = date("Y-m-d H:i:s", strtotime($_GET['to']));
$sql1="SELECT * FROM `Table` WHERE mydate>='$to' and mydate<='$from'";
只要我这样搜索就可以了。
2017-08-18 08:59:53
但我需要做的就是像这样搜索:
2017-08-18
我搜索时仍会得到相同的结果。
我不想在搜索字符串/查询中使用时间。
答案 0 :(得分:5)
尝试使用mysql date()
函数:
$sql1="SELECT * FROM `Table` WHERE date(mydate)>='$to' and date(mydate)<='$from'";
mysql date()
函数仅以默认Y-m-d
格式从datetime列返回日期部分。
答案 1 :(得分:1)
你非常接近。如果您要在DATETIME
或其他日期戳列中搜索特定日期的匹配项,请执行以下操作:
WHERE mydate >= DATE(whatever_first_day)
AND mydate < DATE(whatever_last_day) + INTERVAL 1 DAY
这会搜索whatever_first_day
中提到的日期的所有内容,从该日期的午夜开始,以及{{1}后一天午夜的所有内容,但不包括(<
) }。
这种搜索方式是sargable: it can use an index on the mydate
column。
您也可以使用
whatever_last_day
但这不是可以接受的。
答案 2 :(得分:0)
"SELECT * FROM `Table` WHERE date_format(mydate,"%Y-%m-%d")>='$to' and date_format(mydate,"%Y-%m-%d")<='$from'";