2016-03-08 5 views
1

У меня есть таблица с двумя колонками.Mysql - Последние 30 дней

  • Первый столбец является дата хранится в виде: (пример): 01/01/2015 00:00:00
  • Секунды колонка число: как (пример): 500

Я написал заявление SQL, который выглядит как это:

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

Если я выполнить это заявление он не извлекает никаких данных, и я не могу найти ошибку

Я хочу только данные за последний месяц в результате запроса (последние 30 дней).

бы признательна за любую помощь ..

Редактировать согласно OP комментариев:

Даты сохраняются как дата и он работает, но дата столбца в моей таблице хранящейся даты в течение следующих 5 лет и он показывает данные вроде: 09.03.2016 (что тоже завтра). Есть ли способ показать только дату с 30 days назад до today?

+4

хранить даты как 'date's, а не строки, и вы это исправить. , , и другие . , , проблемы. –

+0

Две вещи. 1) убедитесь, что дата, в которую вы проходите, на самом деле является датой, вы можете конвертировать на дату в SQL, если это необходимо. 2) Теперь() возвращает время в дополнение к дате, и вы сравниваете полное datetime для равенства. Это означает, что время должно совпадать. – DiscipleMichael

+0

Благодарим вас за ответ. Забыл, что время будет сравниваться. =) –

ответ

4

Edit: Измененный запрос в соответствии с 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) 
+0

Дата сохраняется как дата, и она работает, но дата столбца в моей таблице хранит даты в течение следующих 5 лет, и она показывает такие данные, как: 09.03.2016 (это tommorow) тоже .. Есть ли способ только показать дату с сегодняшнего дня - 30 дней назад? –

+0

Проверьте обновленный ответ. Если он работает для вас, тогда примите ответ, чтобы он мог быть закрыт. – Utsav

+0

Работа, спасибо =) –

0

Если тип данных DateTime или метка времени (и вы хотите, чтобы проверить время):

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

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

Добро пожаловать на СО, и спасибо за ваш ответ. Попробуйте дать некоторое объяснение только ответам на код. –

1
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() 
Смежные вопросы