MySQL 쿼리-오늘부터 지난 30 일 사이의 레코드 추가 된 모든 레코드를 반환하고 싶습니다. 표시

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

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

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

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

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



답변

당신은 적용 할 필요가 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()


답변

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


답변

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()


답변

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

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

결정된


답변

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

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


답변

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

SELECT myDate
FROM myTable
WHERE myDate BETWEEN DATEADD(DAY, -30, GETDATE()) AND GETDATE()


답변