根据VARCHAR日期选择mysql日期范围

时间:2016-06-15 16:56:56

标签: php mysql

我现在要做的是从今天起一周内从mysql表中获取一些数据。我唯一的挑战是Dates以VARCHAR格式存储D M d Y。

我的表存储Date示例: 2016年7月3日星期三

我的代码是:

    $result = mysqli_query($con," SELECT * FROM `BIMTECH_academy_2016_classes` WHERE STR_TO_DATE(Date, '%D %M %d %Y') > DATE_SUB(NOW(), INTERVAL 1 WEEK) ORDER BY Date,From DESC; ");
    while($row = mysqli_fetch_array($result))
    {
          echo $row['ClassNumber'];
          echo $row['CourseName'];
          echo $row['Date'];
          echo $row['From'];
          echo $row['To'];
    }

My Current Table

2 个答案:

答案 0 :(得分:0)

那是......好吧,有点难过。日期应存储为正确的数据类型,因为您可以在不过多开销的情况下查询数据。如果有机会,请将这些日期转换为有效日期格式,并将列类型更改为datedatetime

与此同时,您可以使用MySQL的STR_TO_DATE()函数,但由于它将在WHERE部分查询中使用,因此MySQL将始终扫描整个表,然后在内部将所有字符串转换为日期,然后才与你需要的东西进行比较。如果表中存储了大量数据,那可能会非常慢。对列进行索引也无济于事,因为MySQL必须在能够执行比较之前获取并转换所有列。

答案 1 :(得分:0)

例如: 只需将@date与您的列名称重新关联,您就应该以您想要的格式返回日期。

SET @date = "Sun Jul 10 2016";
SELECT DATE_FORMAT(STR_TO_DATE(@date,"%a %b %d %Y"),"%Y-%m-%d") as formatted_date

更多详情:DATE_FORMATSTR_TO_DATE