我存储在MySQL数据库的varchar日期。我知道这是不理想的。但它是什么我的时刻。
例如日期:
$start_date = "11/22/2019";
$start_date = strtotime($start_date);
$end_date = "11/29/2020";
$end_date = strtotime($end_date);
我想如果这个格式的日期范围落在内写检查,看看查询
我遇到问题时,开始日期具有同月为结束日期,但不同的年份。
if (!empty($start_date)) {
$where_clause[] = "UNIX_TIMESTAMP(start_date) >= '" . $start_date . "'";
}
if (!empty($end_date)) {
$where_clause[] = "UNIX_TIMESTAMP(end_date) <= '" . $end_date . "'";
}
我读了UNIX_TIMESTAMP会允许我这样做,但它似乎并不奏效。
我怎样才能让这个查询的工作?
也许在这里做最简单的事情是只使用STR_TO_DATE
针对你的PHP代码正确ISO日期文字比较你的MySQL的文本日期。也就是说,使用沿着这些线路查询:
SELECT *
FROM yourTable
WHERE STR_TO_DATE(start_date, '%m/%d/%Y') > ?;
到?
占位符你的值绑定如date('Y-m-d', strtotime('11/22/2019'))
和不'11/22/2019'
,其中后者是在非可使用的非ISO格式。
当你在你的问题开始提到的那样,这将是最好存放所有日期为真正的日期类型列类型,而不是文字。