2012-09-06 5 views
7

까지 요일까지 MySQL에서 작업하고 날짜/시간을 사용하여 작업해야합니다. 유닉스 타임 스탬프가있는 int 열을 사용하고 있지만 문제가 없었지만 오늘 가이드를 읽은 후 기본적으로 "current_timestamp"가있는 타임 스탬프 열을 테스트하십시오.MySQL 지난 달 데이터를 current_timestamp로 선택하십시오.

저는 지난 달 데이터를 "2012-09-07 00:23:30"형식의 열로 선택하는 방법에 관심이 있으십니까? 그리고 어쩌면 거기에 이번 달 초에 데이터를 줄 수있는 까다로운 쿼리가 있습니다 (지난 30 일이 아닌 09-01 00:00:00에서 오늘까지).

+0

나는 오래 전에 유사한 문제에 직면했고 서버 측 언어 (이 경우에는 PHP이지만 어떤 것이든지 이것을 할 수있게 해줌)를 통해 날짜를 계산하는 것을 끝냈다. 어쨌든, 이것에도 관심이 있습니다. :) – jribeiro

+0

@jribeiro 답변을 게시,보세요. – Ariel

답변

17

이 당신에게 지난 달 줄 것이다 : 달의 시작부터

WHERE dateColumn BETWEEN SUBDATE(CURDATE(), INTERVAL 1 MONTH) AND NOW(); 

이을 : 특별한 아무것도 없다 BETWEEN

WHERE dateColumn BETWEEN STR_TO_DATE('2012-09-01', '%Y-%m-%d') AND NOW(); 

, 그것은

dateColumn <= ... AND dateColumn >= .... 
단지 바로 가기입니다

흠, NOW() 비교는 실제로 필요하지 않습니다. 이전에 모든 레코드가 있기 때문입니다.

그래서 그냥 할 : 현재 월의

WHERE dateColumn >= STR_TO_DATE('2012-09-01', '%Y-%m-%d') 

동적 시작 :

WHERE dateColumn >= CURDATE() - INTERVAL DAY(CURDATE())-1 DAY 

이 빼기 후, 현재 날짜부터 그 달의 날짜를 추출입니다 않는 모든 많은 일 덜 하나 그것에서.

당신은 common_schema 살펴 보셔야합니다
+0

내가보기에는 동적 쿼리가 필요한 경우입니다. 나는이 일을하지만 서버 측에서이 달의 시작을 찾아야한다. 그러나 이것은 OP가 요청한 것 이상일 수 있습니다. :) – jribeiro

+0

@jribeiro Dynamic은 아무런 문제가 없습니다 - 답변을 업데이트했습니다. – Ariel

3

, 그것은 설치가 용이 그리고 당신이 찾고있는 정확하게 start_of_month()를라는 함수를 포함하는 훌륭한 도구가 많이있다 : 당신은 MySQL의 타임 스탬프가있는 경우

select * 
from your_table 
where your_column >= common_schema.start_of_month(now()) 
-1

을 , 2013-09-29 22:27:10 같은 당신은 다음, 유닉스이

select * from table WHERE MONTH(FROM_UNIXTIME(UNIX_TIMESTAMP(time)))=9; 

변환을 9 월이 경우 9, 달 추출하기 위해 유닉스 시간 기능을 사용할 수 있습니다.

+1

더 나은 아직'select * 테이블에서 MONTH (시간) = (MONTH (NOW())); ' – Federico

+0

다음 달에는 이번 달 어떨까요? – Mala

+0

* MONTH (시간) = (MONTH (NOW())) 및 YEAR (시간) = YEAR (NOW()))에서 테이블을 선택 * 할 수 있습니다. – Stenyg

관련 문제