【问题标题】:Mysql -- Last 30 daysMysql -- 过去 30 天
【发布时间】:2016-03-08 13:24:20
【问题描述】:

我有一个包含两列的表格。

  • 第一列是存储为的日期:(示例):01/01/2015 00:00:00
  • 秒列是一个数字:如(示例):500

我写了一个如下所示的 SQL 语句:

select * 
from cc_open_incident_view
WHERE (DATE =(NOW() - INTERVAL 1 MONTH))

如果我执行此语句,它不会检索任何数据并且我找不到错误

我只想要上个月的数据作为查询的结果(过去 30 天)。

不胜感激。

按照 OP cmets 进行编辑:

日期保存为日期并且它正在工作,但我表中的日期列存储了未来 5 年的日期,它显示的数据也如下:09.03.2016(即明天)。有没有办法只显示从30 daystoday 的日期?

【问题讨论】:

  • 将日期存储为dates 而不是字符串,您将解决此问题。 . .和别的 。 . .问题。
  • 两件事。 1)确保您传入的日期实际上是一个日期,如果需要,您可以在 SQL 中转换为日期。 2) Now() 除了返回日期之外还返回一个时间,并且您正在比较整个日期时间是否相等。这意味着时间也必须匹配。
  • 感谢您的回复。忘了时间也会比较。 =)

标签: mysql sql


【解决方案1】:

编辑:根据 OP 更改查询

select * 
from cc_open_incident_view
WHERE date between (CURDATE() - INTERVAL 1 MONTH ) and CURDATE()

上一个答案:

如果日期保存为date,则使用此

select * 
from cc_open_incident_view
WHERE date >= (CURDATE() - INTERVAL 1 MONTH )

如果日期被保存为字符串然后使用它(假设它在dd/mm/yyyy ...

select * 
from cc_open_incident_view
WHERE STR_TO_DATE(date ,''%d/%m/%y %h:%i:%s')>= (CURDATE() - INTERVAL 1 MONTH )

【讨论】:

  • 日期保存为日期并且它正在工作,但我表中的日期列存储了未来 5 年的日期,它显示的数据也如下:09.03.2016(即明天)。 . 有没有办法只显示从今天开始的日期 - 30 天前?
  • 检查更新的答案。如果它对您有用,请接受答案,以便将其关闭。
  • 工作中,谢谢 =)
  • 如果日期保存为字符串,则修复数据。
【解决方案2】:
SELECT  *
FROM    cc_open_incident_view
WHERE   yourdatetimecolumn BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE()

另请注意,CURDATE() 仅返回日期的 DATE 部分,因此如果您将 yourdatetimecolumn 存储为 DATETIME 并填充了时间部分,则此查询将不会选择今天的记录。

在这种情况下,您需要改用NOW

SELECT  *
FROM    cc_open_incident_view
WHERE   yourdatetimecolumn BETWEEN NOW() - INTERVAL 30 DAY AND NOW()

【讨论】:

    【解决方案3】:

    如果数据类型是日期时间或时间戳(并且您要检查时间):

    SELECT * 
    FROM yourtable 
    WHERE yourdatetimeortimestampcolumn <= NOW() - INTERVAL 1 MONTH;
    

    如果您的列数据类型是日期:

    SELECT * 
    FROM yourtable 
    WHERE yourdatecolumn <= CURRENT_DATE() - INTERVAL 1 MONTH;
    

    如果你的列是一个字符串,你需要先转换它:

    SELECT STR_TO_DATE('5/16/2011 20:14 PM', '%c/%e/%Y %H:%i');
    

    http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_str-to-date

    【讨论】:

      【解决方案4】:
      select * 
      from cc_open_incident_view where DATE >= [strat date] and DATE <= [current date];
      

      【讨论】:

      • 欢迎您,感谢您的回答。请尝试对纯代码答案提供一些解释。
      猜你喜欢
      • 1970-01-01
      • 2012-12-09
      • 2020-09-28
      • 2011-01-03
      • 1970-01-01
      • 1970-01-01
      • 2019-07-18
      • 2020-06-29
      • 2013-05-19
      相关资源
      最近更新 更多