programing

SQL은 정확히 3주 전에 마지막으로 업데이트된 DATETIME 필드를 가져옵니다.

shortcode 2022. 10. 15. 08:51
반응형

SQL은 정확히 3주 전에 마지막으로 업데이트된 DATETIME 필드를 가져옵니다.

이 쿼리는 이전에 DATEETIME 필드에 사용한 것과 동일하지만 DATETIME 필드의 경우 작동하지 않습니다.

SELECT
    *
FROM 
    user_log
WHERE 
    log_updated = DATE_SUB(DATE(NOW()), INTERVAL 21 DAY);

정확히 21일 전 날짜로 하고 싶은데, 그날 중에 아무 때나 가능합니다.21일 이상(또는 21일 이하)은 원치 않습니다.

다음을 수행할 수 있습니다.

SELECT
    *
FROM 
    user_log
WHERE 
    DATE(log_updated) = DATE(NOW() - INTERVAL 21 DAY);

그러나 Column에서 함수를 사용하면 색인(정의된 경우)의 사용이 방해되기 때문에 효율적인(sargable) 솔루션이 아닙니다.

따라서 더 나은 접근법은 다음과 같습니다.

SELECT
    *
FROM 
    user_log
WHERE 
    log_updated >= DATE(NOW() - INTERVAL 21 DAY) AND 
    log_updated < DATE(NOW() - INTERVAL 20 DAY)

최대 한도 확인(포함되지 않음)에 필요한 날짜보다 하루 늦게 사용하였으므로 주의하시기 바랍니다.그것은 에 의해 얻어진다.INTERVAL -20 DAY

부터DATE(NOW())와 같다CURDATE(), 를 사용하는 것이 좋습니다.

WHERE log_updated >= CURDATE() - INTERVAL 21 DAY
  AND log_updated  < CURDATE() - INTERVAL 20 DAY

이것은 다음에 인덱스를 사용할 수 있습니다.log_updated.

그에 반해서,DATE(log_updated) ... 인덱스를 사용할 수 없다log_updated.

언급URL : https://stackoverflow.com/questions/53072120/sql-get-a-last-updated-datetime-field-from-exactly-3-weeks-ago

반응형