我现在要做的是从今天起一周内从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'];
}
答案 0 :(得分:0)
那是......好吧,有点难过。日期应存储为正确的数据类型,因为您可以在不过多开销的情况下查询数据。如果有机会,请将这些日期转换为有效日期格式,并将列类型更改为date
或datetime
。
与此同时,您可以使用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_FORMAT,STR_TO_DATE