지난 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_FORMAT
에 SELECT
절 아닌 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()