首页 文章

如何使用PHP和MySQL按照日期从表中获取最近7天的记录

提问于
浏览
0

我需要一个帮助 . 我需要使用PHP和MySQL蚀刻最近7天的记录,包括今天的日期 . 我在解释下面的表格 .

db_special:

id             date                                        name

1       11/27/2017 11:14:48 AM                              Raj

2       10/26/2017 12:11:30 PM                              Rahul

在这里,我需要根据 date 字段值获取数据 . Date 字段格式为 mm/dd/yyyy ,我的要求是从过去7天中获取表中的所有数据,包括使用PHP和MySQL的 today . 请帮忙 .

3 回答

  • 3

    您将MySQL存储为非ISO格式的文本 mm/dd/yyyy . 因此,您需要进行日期转换,以便能够访问MySQL提供的任何日期功能 . STR_TO_DATE 功能在这里派上用场 . 请考虑以下查询:

    SELECT
        id, date, name
    FROM yourTable
    WHERE
        STR_TO_DATE(col, '%m/%d/%Y') > DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND
        STR_TO_DATE(col, '%m/%d/%Y') <= CURDATE();
    

    如果您不希望将来有任何记录,则可以省略第二个不等式 .

    请注意,如果您计划使用 date 列进行日期处理,那么您应该考虑将此列设置为真正的日期类型,而不是文本 .

    注意:您的日期字符串中实际上还有一个时间组件 . 如this demo shows,如果我们在这样的时间戳上使用格式掩码 %m/%d/%Y ,它将完全剥离时间组件,只留下日期 .

  • 0

    如果你的“日期”列是一个字符串,MySQL的查询就是这样的:

    select *
    from db_special
    where STR_TO_DATE(`date`, '%m/%d/%Y') >=date_sub(curdate(),INTERVAL 6 DAY) 
      and STR_TO_DATE(`date`, '%m/%d/%Y') < date_add(curdate(),INTERVAL 1 DAY)
    

    如果存储为正确的日期,那么你不需要str_to_date()

    select *
    from db_special
    where date >=date_sub(curdate(),INTERVAL 6 DAY) 
      and date < date_add(curdate(),INTERVAL 1 DAY)
    

    注意curdate()在00:00:00(当天开始)返回今天的日期,因此要包含今天的所有数据,您必须在当前日期添加1天 .

  • 0

    试试这个:

    select * from db_special
    where date between date_sub(now(),INTERVAL 1 WEEK) and now();
    

    您可以使用 current_date 作为指定的(任意)格式

    SELECT * FROM db_special WHERE WEEK (date) = WEEK( current_date ) - 1 AND YEAR( date) = YEAR( current_date );
    

相关问题