如何显示和计算昨天的日期值?我曾经time()在数据库中插入日期.例:
URL: google.com youtube.com google.com youtube.com test.com youtube.com
DateVisited: 1313668492 1313668540 1313668571 13154314
Run Code Online (Sandbox Code Playgroud)
我想要显示表中存在多个URL的URL以及昨天访问过多少个URL.示例结果:
LINK | timesExisted | timesVisitedYesterday
Google.com | 2 | 2
youtube.com| 3 | 3
Run Code Online (Sandbox Code Playgroud)
我已经有了关于获取昨天日期的想法,但我不知道如何计算昨天URL存在的次数并计算表中存在的URL的次数.
Boh*_*ian 147
获得昨天约会的最简单和最好的方法是:
subdate(current_date, 1)
Run Code Online (Sandbox Code Playgroud)
您的查询将是:
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
Run Code Online (Sandbox Code Playgroud)
对于好奇,sum(condition)给你满足条件的行计数的原因,否则需要一个繁琐和冗长的case语句,是在mysql布尔值是1真和0假,所以总结一个条件有效地计算多少次这是真的.使用此模式可以阻止您的SQL代码.
Rom*_* KC 80
SELECT SUBDATE(NOW(),1);
Run Code Online (Sandbox Code Playgroud)
where now()函数在Timestamp中重新调整系统的当前日期和时间...
您可以使用:
SELECT SUBDATE(CURDATE(),1)
Run Code Online (Sandbox Code Playgroud)
sim*_*eco 15
您可以使用:
SELECT SUBDATE(NOW(), 1);
Run Code Online (Sandbox Code Playgroud)
要么
SELECT SUBDATE(NOW(), INTERVAL 1 DAY);
Run Code Online (Sandbox Code Playgroud)
要么
SELECT NOW() - INTERVAL 1 DAY;
Run Code Online (Sandbox Code Playgroud)
要么
SELECT DATE_SUB(NOW(), INTERVAL 1 DAY);
Run Code Online (Sandbox Code Playgroud)
cdh*_*wie 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));
Run Code Online (Sandbox Code Playgroud)
小智 11
上一个或下一个日期、周、月和年计算。它可能对任何人都有帮助。
当前的日期:
select curdate();
Run Code Online (Sandbox Code Playgroud)
昨天:
select subdate(curdate(), 1)
Run Code Online (Sandbox Code Playgroud)
明天:
select adddate(curdate(), 1)
Run Code Online (Sandbox Code Playgroud)
过去 1 周:
select between subdate(curdate(), 7) and subdate(curdate(), 1)
Run Code Online (Sandbox Code Playgroud)
未来 1 周:
between adddate(curdate(), 7) and adddate(curdate(), 1)
Run Code Online (Sandbox Code Playgroud)
最近 1 个月:
between subdate(curdate(), 30) and subdate(curdate(), 1)
Run Code Online (Sandbox Code Playgroud)
未来 1 个月:
between adddate(curdate(), 30) and adddate(curdate(), 1)
Run Code Online (Sandbox Code Playgroud)
这个月:
subdate(curdate(),day(curdate())-1) and last_day(curdate());
Run Code Online (Sandbox Code Playgroud)
过去 1 年:
between subdate(curdate(), 365) and subdate(curdate(), 1)
Run Code Online (Sandbox Code Playgroud)
未来 1 年:
between adddate(curdate(), 365) and adddate(curdate(), 1)
Run Code Online (Sandbox Code Playgroud)
小智 8
查询最后几周:
SELECT *
FROM dual
WHERE search_date BETWEEN SUBDATE(CURDATE(), 7) AND CURDATE()
Run Code Online (Sandbox Code Playgroud)
我改编了 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));
Run Code Online (Sandbox Code Playgroud)
小智 5
虽然选择的答案是正确且更简洁的,但我还是会为其他答案中指出的结构辩护:
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));
Run Code Online (Sandbox Code Playgroud)
如果您只需要一个没有时间戳的空档,也可以将其编写为以下内容:
SELECT * FROM your_table
WHERE DateVisited >= CAST(NOW() - INTERVAL 1 DAY AS DATE)
AND DateVisited <= CAST(NOW() AS DATE);
Run Code Online (Sandbox Code Playgroud)
之所以使用CAST与SUBDATEIS CAST是ANSI SQL语法。 SUBDATE是的日期算术组件的MySQL特定实现CAST。如果必须迁移到其他数据库,养成使用ANSI语法的习惯可以减少麻烦。养成专业实践的习惯也是很好的,因为将来您几乎肯定会与其他DBMS一起工作。
没有一个主要的DBMS系统完全兼容ANSI,但是它们中的大多数都实现了广泛的ANSI语法集,而在MySQL及其子代(MariaDB,Percona等)之外,几乎没有一个将实现MySQL特定的语法。
| 归档时间: |
|
| 查看次数: |
150988 次 |
| 最近记录: |