【问题标题】:UNIX_TIMESTAMP with date in MySQL query not workingMySQL 查询中带有日期的 UNIX_TIMESTAMP 不起作用
【发布时间】:2019-02-04 05:57:44
【问题描述】:

我将日期作为 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 允许我这样做,但它似乎不起作用。

我怎样才能使这个查询工作?

【问题讨论】:

  • 我认为日期应该格式化为2019-11-22 (yyyy-mm-dd) 然后将其作为UNIX_TIMESTAMP的参数传递。除非您转换它,否则它不接受任何日期格式。 w3resource.com/mysql/date-and-time-functions/…
  • 您的数据库中的日期到底是什么样的?

标签: php mysql unix-timestamp


【解决方案1】:

也许在这里最简单的做法就是将使用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')) '11/22/2019',后者是不可用的非ISO 格式。

正如您在问题开始时提到的,最好将所有日期存储为真正的日期类型列类型,而不是文本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 2014-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多