MySQL 选择了昨天的日期

如何显示和计算日期为昨天的值? 我使用 time()在数据库中插入日期。例如:

URL: google.com youtube.com google.com youtube.com test.com youtube.com
DateVisited: 1313668492 1313668540 1313668571 13154314

我想显示有多少网址有多个存在于表中,以及有多少这个网址已经访问了昨天。示例结果:

LINK       | timesExisted | timesVisitedYesterday
Google.com |       2      | 2
youtube.com|       3      | 3

我已经有了获取昨天日期的想法,但我不知道如何计算一个 URL 昨天存在了多少次,也不知道一个 URL 在表中存在了多少次。

222013 次浏览

你可以使用表达式 CAST(NOW() - INTERVAL 1 DAY AS DATE)来得到昨天的日期:

SELECT * FROM your_table


WHERE DateVisited >= UNIX_TIMESTAMP(CAST(NOW() - INTERVAL 1 DAY AS DATE))
AND DateVisited <= UNIX_TIMESTAMP(CAST(NOW() AS DATE));

得到昨天日期的最简单和最好的方法是 更新:

subdate(current_date, 1)

你的问题是:

SELECT
url as LINK,
count(*) as timesExisted,
sum(DateVisited between UNIX_TIMESTAMP(subdate(current_date, 1)) and
UNIX_TIMESTAMP(current_date)) as timesVisitedYesterday
FROM mytable
GROUP BY 1

令人好奇的是,sum(condition)给出满足条件的行的 计数的原因是,在 mysql 中,布尔值是 1表示 true,0表示 false,因此对条件求和有效地计算了它为 true 的次数。使用此模式可以整理 SQL 代码。

SELECT SUBDATE(NOW(),1);

其中 now ()函数返回当前 Timestamp 系统的日期和时间..。

你可使用:

SELECT SUBDATE(CURDATE(),1)

我改编了上面的一个答案从 cdhowie,因为我不能得到它的工作。我觉得这样挺好。我怀疑使用 UNIX _ TIMESTAMP 函数也可以做到这一点。

SELECT * FROM your_table


WHERE UNIX_TIMESTAMP(DateVisited) >= UNIX_TIMESTAMP(CAST(NOW() - INTERVAL 1 DAY AS DATE))
AND UNIX_TIMESTAMP(DateVisited) <= UNIX_TIMESTAMP(CAST(NOW() AS DATE));

最近几周的问题:

SELECT *
FROM dual
WHERE search_date BETWEEN SUBDATE(CURDATE(), 7) AND CURDATE()

虽然所选择的答案是正确的,而且更简洁,但我认为其他答案中的结构是正确的:

SELECT * FROM your_table
WHERE UNIX_TIMESTAMP(DateVisited) >= UNIX_TIMESTAMP(CAST(NOW() - INTERVAL 1 DAY AS DATE))
AND UNIX_TIMESTAMP(DateVisited) <= UNIX_TIMESTAMP(CAST(NOW() AS DATE));

如果你只需要一个没有时间戳的空白日期,你也可以这样写:

SELECT * FROM your_table
WHERE DateVisited >= CAST(NOW() - INTERVAL 1 DAY AS DATE)
AND DateVisited <= CAST(NOW() AS DATE);

使用 CAST与使用 SUBDATE的原因是 CAST是 ANSI SQL 语法。SUBDATE是一个 MySQL 特有的 CAST日期算术组件的实现。养成使用 ANSI 语法的习惯可以减少迁移到不同数据库时的麻烦。养成专业实践的习惯也是很好的,因为将来你几乎肯定会和其他 DBMS 一起工作。

没有一个主要的数据库系统是完全符合 ANSI 标准的,但是它们中的大多数都实现了广泛的 ANSI 语法,而除了 MySQL 及其子系统(MariaDB,Percona 等)之外,几乎没有一个系统会实现特定于 MySQL 的语法。

你可使用:

SELECT SUBDATE(NOW(), 1);

或者

SELECT SUBDATE(NOW(), INTERVAL 1 DAY);

或者

SELECT NOW() - INTERVAL 1 DAY;

或者

SELECT DATE_SUB(NOW(), INTERVAL 1 DAY);

上一次或下一次日期,周,月和年的计算。它可能对任何人都有帮助。

目前日期:

select curdate();

昨日:

select subdate(curdate(), 1)

明天:

select adddate(curdate(), 1)

上一周:

select between subdate(curdate(), 7) and subdate(curdate(), 1)

下一周:

between adddate(curdate(), 7) and adddate(curdate(), 1)

上一个月:

between subdate(curdate(), 30) and subdate(curdate(), 1)

下一个月:

between adddate(curdate(), 30) and adddate(curdate(), 1)

本月:

subdate(curdate(),day(curdate())-1) and last_day(curdate());

过去1年:

between subdate(curdate(), 365) and subdate(curdate(), 1)

下一年:

between adddate(curdate(), 365) and adddate(curdate(), 1)