MySQL 쿼리-오늘부터 지난 30 일 사이의 레코드


122

지난 30 일 이내에 데이터베이스에 추가 된 모든 레코드를 반환하고 싶습니다. 표시 목적으로 날짜를 mm / dd / yy로 변환해야합니다.

create_date between DATE_FORMAT(curdate(),'%m/%d/%Y') AND (DATE_FORMAT(curdate() - interval 30 day,'%m/%d/%Y')) 

내 진술은 기록을 지난 30 일로 제한하지 못하고 모든 기록을 선택합니다.

누구든지 올바른 방향으로 나를 가리킬 수 있습니까? 친한 것 같아요.

감사합니다. 즐거운 한 주 보내세요.

답변:


292

당신은 적용 할 필요가 DATE_FORMATSELECT절 아닌 WHERE절 :

SELECT  DATE_FORMAT(create_date, '%m/%d/%Y')
FROM    mytable
WHERE   create_date BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE()

또한 날짜 CURDATE()DATE일부만 반환 하므로 시간 부분을 채운 상태 create_date로 a DATETIME로 저장하면 이 쿼리는 오늘의 레코드를 선택하지 않습니다.

이 경우 NOW대신 다음 을 사용해야 합니다.

SELECT  DATE_FORMAT(create_date, '%m/%d/%Y')
FROM    mytable
WHERE   create_date BETWEEN NOW() - INTERVAL 30 DAY AND NOW()

이 답변의 두 번째 부분은 매우 중요합니다! 나는 그 문제가 있었을 수도 있고 없었을 수도 있고,이 대답으로 돌아올 때까지 머리를 긁적이었습니다.
Tyler Lazenby

@Quassnoi 죄송합니다. 이것은 WordPress \ wpdb 준비 문제로 보입니다. 다시 한 번 죄송합니다.
vee 2018

56
SELECT
    *
FROM
    < table_name >
WHERE
    < date_field > BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY)
AND NOW();

2
BETWEEN CURDATE ()-INTERVAL 30
Dan

1
@ErmSo 왜 그런지 알 수 있습니까?
슬림

3
나는 거짓말하지 않을 것입니다 – 그것은 2 년 전이었고 기억이 나지 않습니다! 죄송합니다 : P
Dan

1
사용할 필요가 없습니다DATE_FORMAT(create_date, '%m/%d/%Y')
kazy 2015 년

@Dan 저는 이전 날짜를 괄호로 묶어 더 읽기 쉽게 만들고 싶습니다. ... WHERE create_date BETWEEN (NOW() - INTERVAL 30 DAY) AND NOW()
Kris Craig

10

DATE_FORMAT문자열을 반환하므로 BETWEEN절 에서 두 개의 문자열을 사용 하고 있는데 예상대로 작동하지 않습니다.

대신 날짜를에서 형식으로 변환 하고 실제 날짜에 대해 SELECT수행하십시오 BETWEEN. 예를 들면

SELECT DATE_FORMAT(create_date, '%m/%d/%y') as create_date_formatted
FROM table
WHERE create_date BETWEEN (CURDATE() - INTERVAL 30 DAY) AND CURDATE()

9

이것을 mysql로 ​​작성할 수도 있습니다.

SELECT  DATE_FORMAT(create_date, '%m/%d/%Y')
FROM    mytable
WHERE   create_date < DATE_ADD(NOW(), INTERVAL -1 MONTH);

결정된


2
주의 : 찬성 투표에도 불구하고 지난 30 일이 아닌 다음 30 일 / 월 의 날짜를 선택합니다 !
JonBrave

4
동의합니다. WHERE create_date> DATE_ADD (NOW (), INTERVAL -1 MONTH) 여야합니다.
Bhavik P.

6

현재 날짜 활동 및 이전 30 일 동안의 전체 활동의 경우 SYSDATE가 하루에 가변적이기 때문에 이전 30 일에 해당 날짜에 대한 전체 데이터가 없기 때문에이를 사용하십시오.

SELECT  DATE_FORMAT(create_date, '%m/%d/%Y')
FROM mytable
WHERE create_date BETWEEN CURDATE() - INTERVAL 30 DAY AND SYSDATE()

1

여기에 사용하지 않고 솔루션의 curdate()기능이 사용하는 사람들을위한 솔루션입니다 TSQL내 생각은

SELECT myDate
FROM myTable
WHERE myDate BETWEEN DATEADD(DAY, -30, GETDATE()) AND GETDATE()
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.