2013-09-06 3 views
4

내 데이터베이스 테이블에 날짜 (yy-mm-dd 형식으로 날짜를 저장하는 데 사용되는 varchar 필드)가있는 필드가 있는데, 이제 2 주 전에 레코드를 선택하려고합니다. 어떻게 할 수 있습니까?2 주 전의 검색어 선택

+0

의 과거에 선택 데이터를 사용할 수 있습니까? – dcaswell

+1

당신이 찾고있는 용어는 "날짜 산술"입니다. –

+0

가능한 복제본 [2 주 전 MYSQL에서 어떻게 선택합니까?] (http://stackoverflow.com/questions/6683768/how-do-i-select-two-weeks-ago-in-mysql) – Air

답변

5

MySQL에서는 암묵적인 날짜 계산이 상당히 유연합니다. CAST() 또는 DATE()을 명시 적으로 사용하지 않고도 날짜를 문자열로 비교할 수 있지만 MySQL이 형식을 올바르게 해석 할 수 있다고 믿고 있습니다. 운 좋게도 yy-mm-dd으로 정상적으로 처리됩니다.

BETWEENINTERVAL을 사용하면 쿼리를 쉽게 읽을 수 있습니다. 예를 들면 :

SELECT * FROM Holidays 
WHERE Date BETWEEN (NOW() - INTERVAL 14 DAY) AND NOW(); 

BETWEEN의 유일한 트릭은 당신이 하한 제의 상한 초를 넣어해야한다는 것입니다; 당신이 BETWEEN 5 AND 2를 작성하는 경우도 2

Here's a demo of the query in action at SQL Fiddle 이하하면서 5보다 크거나 같아야 수있는 값과 recognized INTERVAL expressions의 목록이 없기 때문에, 예를 들어, 이것은 항상 FALSE로 평가 MySQL.

표현식 NOW() - INTERVAL 14 DAY 주변의 괄호는 필수는 아니지만 명확하게하기 위해 여기에서 사용하는 것이 좋습니다. 두 글자를 희생하여 올바른 구문 강조가 없을 때 술어 절을 읽기가 조금 더 쉽게 만듭니다.

0

이상적으로는 날짜를 저장하는 데 날짜 형식을 사용해야하지만, 그렇지 않은 경우에는 날짜까지 캐스팅을 조사한 다음 비교해야합니다.

select * from yourtable where cast (yourdate as Date) BETWEEN Date_Add(CURDATE(), INTERVAL -21 Day) and Date_Add(CURDATE(), INTERVAL -14 Day) 

참고, 테스트되지 않았으며 약간의 조정이 필요할 수 있지만 수행해야 할 작업에 대한 일반적인 정보를 제공해야합니다.

또한 가능하다면 varchar 필드를 날짜 필드로 변환해야합니다. 이러한 유형의 일이 발생하지 않도록하려면 날짜 유형이 있습니다. 그러나 필드 유형 변경은 항상 그렇지는 않습니다. 가능성.

0

12 일 전에는 으로 간단하게 할 수 있습니다. 문자열날짜를으로 비교하십시오.

SELECT * 
FROM your_table 
WHERE your_date >= ADDDATE(NOW(), -14) AND your_date < NOW() 
+0

참고, 날짜는 varchar로 저장되므로 캐스트를 먼저 수행해야합니다. – user2366842

+0

varchar로 비교 날짜를 지정할 수 있습니다. – Hardy

0

나는이 2 주 돌아가서 그 주에서 일어난 모든 레코드를 선택 뜻 지난

SELECT * FROM Holidays 
WHERE a.dDate >= DATE(NOW()) - INTERVAL 14 
DAY AND a.dDate <= DATE(NOW()) - INTERVAL 8