MySQL选择昨天的日期

时间:2011-08-22 11:32:34

标签: 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次数。

8 个答案:

答案 0 :(得分:135)

获得昨天约会的最简单和最好的方法是:

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)为您提供满足条件的行的 count ,否则需要繁琐且冗长的case语句的原因是在mysql中,对于true,布尔值为1,对于false,布尔值为0,因此对一个条件进行求和会有效计算它的真实次数。使用此模式可以消除SQL代码。

答案 1 :(得分:76)

SELECT SUBDATE(NOW(),1);

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

您可以使用:

SELECT SUBDATE(CURDATE(),1)

答案 2 :(得分:13)

您可以使用:

   serial = MySerializer(data=request.data)
   if serial.is_valid():
       password = serial.validated_data['password']
       new_password = serial.validated_data['new_password']

SELECT SUBDATE(NOW(), 1);

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

SELECT NOW() - INTERVAL 1 DAY;

答案 3 :(得分:11)

您可以使用表达式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));

答案 4 :(得分:8)

查询最后几周:

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

答案 5 :(得分:5)

虽然所选答案正确且更简洁,但我会争论其他答案中提到的结构:

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

如果您只需要一个没有时间戳的日期,您也可以将其写为:

CAST

使用SUBDATECAST SUBDATE的原因是{1}}是ANSI SQL语法。 CASTRange("BA5:BB36")的日期算术组件的MySQL特定实现。养成使用ANSI语法的习惯可以减少令人头疼的问题,如果您必须迁移到其他数据库。作为一种专业实践习惯也很好,因为您将来几乎肯定会与其他DBMS合作。

没有一个主要的DBMS系统完全符合ANSI标准,但是大多数系统都实现了广泛的ANSI语法,而在MySQL及其后代(MariaDB,Percona等)之外的几乎所有系统都不会实现特定于MySQL的语法。

答案 6 :(得分:3)

我从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));

答案 7 :(得分:1)

最后或下一个日期,星期,月份和年份的计算。这可能对任何人都有帮助。

当前日期:

select curdate();

昨天:

select subdate(curdate(), 1)

明天:

select adddate(curdate(), 1)

过去1周:

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

接下来的1周:

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

最近1个月:

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

接下来的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)

接下来的1年:

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