MySQL 按日查询数据
Part 1 查询今日的数据
要在 MySQL 中查询今日的数据,可以使用 CURDATE()
函数来获取当前日期,并将其与你的表中的日期字段进行比较。假设你的表名是 your_table
,并且有一个日期字段 your_date_column
,你可以使用以下查询来获取今日的数据:
SELECT *
FROM your_table
WHERE DATE(your_date_column) = CURDATE();
这里解释一下各个部分的用途:
SELECT *
:选择表中的所有列。FROM your_table
:指定要查询的表。WHERE DATE(your_date_column) = CURDATE()
:筛选条件,DATE(your_date_column)
提取日期部分(如果your_date_column
是DATETIME
类型),CURDATE()
返回当前日期。
如果你的日期时间字段 your_date_column
包含时间信息,并且你希望精确匹配从今天零点开始到当前时间结束的数据,你也可以使用 BETWEEN
语句:
SELECT *
FROM your_table
WHERE your_date_column BETWEEN CONCAT(CURDATE(), ' 00:00:00') AND NOW();
这里解释一下各个部分的用途:
CONCAT(CURDATE(), ' 00:00:00')
:将当前日期与字符串' 00:00:00'
连接,生成今天的零点时刻。NOW()
:返回当前的日期和时间。
这两种方法都可以有效地查询今日的数据,具体选择哪种方式取决于你的需求和 your_date_column
的数据类型。
Part 2
在 MySQL 中查询昨日的数据,你可以使用 CURDATE()
函数结合日期运算来获取昨天的日期,并将其与你的表中的日期字段进行比较。假设你的表名是 your_table
,并且有一个日期字段 your_date_column
,你可以使用以下查询来获取昨日的数据:
SELECT *
FROM your_table
WHERE DATE(your_date_column) = CURDATE() - INTERVAL 1 DAY;
这里解释一下各个部分的用途:
SELECT *
:选择表中的所有列。FROM your_table
:指定要查询的表。WHERE DATE(your_date_column) = CURDATE() - INTERVAL 1 DAY
:筛选条件,DATE(your_date_column)
提取日期部分(如果your_date_column
是DATETIME
类型),CURDATE() - INTERVAL 1 DAY
返回昨天的日期。
如果你的日期时间字段 your_date_column
包含时间信息,并且你希望精确匹配从昨天零点开始到昨天结束的数据,你也可以使用 BETWEEN
语句,结合 DATE_SUB()
函数来生成昨天的日期和时间范围:
SELECT *
FROM your_table
WHERE your_date_column BETWEEN CONCAT(DATE_SUB(CURDATE(), INTERVAL 1 DAY), ' 00:00:00') AND CONCAT(DATE_SUB(CURDATE(), INTERVAL 1 DAY), ' 23:59:59');
或者更简洁地使用 DATE()
函数和 INTERVAL
表达式结合 TIMESTAMP
或 DATETIME
字段:
SELECT *
FROM your_table
WHERE your_date_column >= CURDATE() - INTERVAL 1 DAY + INTERVAL 0 SECONDAND your_date_column < CURDATE() + INTERVAL 0 SECOND;
在这个查询中:
CURDATE() - INTERVAL 1 DAY + INTERVAL 0 SECOND
生成昨天的零点时刻(因为CURDATE()
返回的是没有时间的日期,加上INTERVAL 0 SECOND
不会改变值,但确保了结果是DATETIME
类型,方便比较)。CURDATE() + INTERVAL 0 SECOND
生成今天的零点时刻(同样,加上INTERVAL 0 SECOND
是为了类型匹配),但因为我们想要的是昨天的数据,所以使用<
来确保不包括今天的任何时间。
这两种方法都可以有效地查询昨日的数据,具体选择哪种方式取决于你的需求和 your_date_column
的数据类型。通常,第二种方法(使用 >=
和 <
)在处理 DATETIME
字段时更为直观和准确。