UNIX_TIMESTAMP MySQL 查询中的日期无效
UNIX_TIMESTAMP with date in MySQL query not working
我将日期作为 varchar 存储在 MySQL 数据库中。我知道这不理想..但这是我目前所拥有的。
示例日期:
$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
的 MySQL 文本日期与 PHP 代码中的正确 ISO 日期文字进行比较。也就是说,使用这些行的查询:
SELECT *
FROM yourTable
WHERE STR_TO_DATE(start_date, '%m/%d/%Y') > ?;
到 ?
占位符,您将绑定一个值,例如 date('Y-m-d', strtotime('11/22/2019'))
和 not '11/22/2019'
,后者在非可用的非 ISO 格式。
正如您在问题开头提到的,最好将所有日期存储为真正的日期类型列类型,而不是文本。
我将日期作为 varchar 存储在 MySQL 数据库中。我知道这不理想..但这是我目前所拥有的。
示例日期:
$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
的 MySQL 文本日期与 PHP 代码中的正确 ISO 日期文字进行比较。也就是说,使用这些行的查询:
SELECT *
FROM yourTable
WHERE STR_TO_DATE(start_date, '%m/%d/%Y') > ?;
到 ?
占位符,您将绑定一个值,例如 date('Y-m-d', strtotime('11/22/2019'))
和 not '11/22/2019'
,后者在非可用的非 ISO 格式。
正如您在问题开头提到的,最好将所有日期存储为真正的日期类型列类型,而不是文本。