MySQLselect昨天的date

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

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

我想要显示表中存在多less个URL,以及昨天有多less个URL被访问过。 示例结果:

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

我已经有了获取昨天的date的想法,但我没有计算一个URL昨天存在多less次,并且统计表中存在一个URL的次数。

获取昨天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表示真, 0表示假,所以求和一个条件有效地计算了多less次是真的。 使用这个模式可以使你的SQL代码更加完善。

 SELECT SUBDATE(NOW(),1); 

now()函数在Timestamp中修改当前系统的date和时间…

您可以使用:

 SELECT SUBDATE(CURDATE(),1) 

您可以使用expression式CAST(NOW() - INTERVAL 1 DAY AS DATE)获取昨天的date。 所以这样的事情可能会起作用:

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

查询最后几周:

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

您可以使用:

 SELECT SUBDATE(NOW(), 1); 

要么

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

要么

 SELECT NOW() - INTERVAL 1 DAY; 

要么

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

我修改了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的答案是正确的,更简洁,我会争辩的结构注意到其他答案:

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

如果你只需要一个没有时间戳的裸机,你也可以把它写成如下forms:

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

使用CAST与SUBDATE的原因是CAST是ANSI SQL语法。 SUBDATE是CASTdate算术组件的MySQL特定实现。 如果你需要迁移到不同的数据库,习惯使用ANSI语法可以减less头痛。 作为一个专业的做法也是很好的,因为你将来肯定会和其他DBMS一起工作。

主要的DBMS系统没有一个完全兼容ANSI,但是其中大多数实现了ANSI语法的广泛集合,而在MySQL和它的后代(MariaDB,Percona等)之外几乎没有一个系统会实现特定于MySQL的语法。