MySQL Select最近7天

MySQL Select最近7天,第1张

MySQL Select最近7天

WHERe
子句放错了位置,它必须遵循表引用和JOIN *** 作。

像这样:

 FROM tartikel p1  JOIN tartikelpict p2    ON p1.kArtikel = p2.kArtikel   AND p2.nNr = 1WHERe p1.dErstellt >= DATE(NOW()) - INTERVAL 7 DAYORDER BY p1.kArtikel DESC

编辑 (三三年后)

上面的内容基本上回答了以下问题:“我试图在查询中添加WHERe子句,但现在查询返回错误,我该如何解决?”

关于写一个检查“过去7天”日期范围的条件的问题…

这实际上取决于解释规范,表中列的数据类型是什么(DATE或DATETIME)以及可用的数据…应返回什么。

总结一下:通用方法是为日期/日期时间范围标识一个“开始”,然后为该范围标识“结束”,并在查询中引用它们。让我们考虑一些简单的事情……“昨天”的所有行。

如果我们的列是DATE类型。在将表达式合并到查询中之前,我们可以在简单的SELECT中对其进行测试

 SELECT DATE(NOW()) + INTERVAL -1 DAY

并验证返回的结果是否符合我们的预期。然后,我们可以在WHERe子句中使用相同的表达式,将其与DATE列进行比较,如下所示:

 WHERe datecol = DATE(NOW()) + INTERVAL -1 DAY

对于DATETIME或TIMESTAMP列,我们可以使用

>=
<
不等式比较来指定范围

 WHERe datetimecol >= DATE(NOW()) + INTERVAL -1 DAY   AND datetimecol <  DATE(NOW()) + INTERVAL  0 DAY

对于“过去7天”,我们需要从现在开始知道这是否意味着返回7天…例如过去7 * 24小时,包括比较中的时间部分,…

 WHERe datetimecol >= NOW() + INTERVAL -7 DAY   AND datetimecol <  NOW() + INTERVAL  0 DAY

最近7天,不包括今天

 WHERe datetimecol >= DATE(NOW()) + INTERVAL -7 DAY   AND datetimecol <  DATE(NOW()) + INTERVAL  0 DAY

或过去六整天加上今天到目前为止…

 WHERe datetimecol >= DATE(NOW()) + INTERVAL -6 DAY   AND datetimecol <  NOW()       + INTERVAL  0 DAY

我建议测试SELECT语句右侧的表达式,我们可以使用用户定义的变量代替NOW()进行测试,而不必与NOW()返回的内容绑定在一起,因此我们可以跨周/月测试边界/年边界,等等。

SET @clock = '2017-11-17 11:47:47' ;SELECT DATE(@clock)     , DATE(@clock) + INTERVAL -7 DAY      , @clock + INTERVAL -6 DAY

一旦我们的表达式返回的值适用于特定用例的“开始”和“结束”(即“过去7天”),就可以在WHERe子句的范围比较中使用这些表达式。

(一些开发人员更喜欢使用

DATE_ADD
DATE_SUB
函数代替
+ INTERVAL valDAY/HOUR/MINUTE/MONTH/YEAR
语法。

MySQL提供了一些方便的功能来处理DATE,DATETIME和TIMESTAMP数据类型… DATE,LAST_DAY,

一些开发人员更喜欢计算其他代码的开头和结尾,并在SQL查询中提供字符串文字,以便提交给数据库的查询是

  WHERe datetimecol >= '2017-11-10 00:00'    AND datetimecol <  '2017-11-17 00:00'

这种方法也行得通。(我的偏好是使用CAST,CONVERT或+ INTERVAL技巧将这些字符串文字显式转换为DATETIME。

  WHERe datetimecol >= '2017-11-10 00:00' + INTERVAL 0 SECOND    AND datetimecol <  '2017-11-17 00:00' + INTERVAL 0 SECOND

上述所有假设我们现在存储“日期”,在适当的日期,DATETIME和/或TIMESTAMP数据类型,而不是将它们存储在不同的格式如琴弦

'dd/mm/yyyy'
m/d/yyyy
朱利安日期,或者偶尔不规范的格式,或者多项从纪元开始算起的秒数,此答案将需要更长的时间。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4900053.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-12
下一篇 2022-11-12

发表评论

登录后才能评论

评论列表(0条)

保存