Mysql - 过去30天

时间:2016-03-08 13:24:21

标签: mysql sql

我有一个有两个列的表。

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

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

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

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

我只想查询上个月的数据(过去30天)。

非常感谢任何帮助..

根据OP评论进行编辑:

日期保存为日期并且有效,但我表格中的列日期已存储了未来5年的日期,并显示了如下数据:09.03.2016(明天也是如此)。有没有办法只显示从30 days回到today的日期?

4 个答案:

答案 0 :(得分:10)

编辑:根据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 )

答案 1 :(得分:1)

CURDATE()

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

在这种情况下,您需要使用SELECT * FROM cc_open_incident_view WHERE yourdatetimecolumn BETWEEN NOW() - INTERVAL 30 DAY AND NOW() 代替:

 graph_def = sess.graph.as_graph_def()
 for node in graph_def.node:
     print node

答案 2 :(得分:0)

如果数据类型是datetime或timestamp(并且您想检查时间):

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

如果您的列数据类型是date:

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

答案 3 :(得分:0)

select * 
from cc_open_incident_view where DATE >= [strat date] and DATE <= [current date];