반응형
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
반응형
'programing' 카테고리의 다른 글
Javascript call() & apply() vs bind()? (0) | 2022.10.15 |
---|---|
비활성화 버튼에서 부트스트랩 툴팁을 활성화하는 방법 (0) | 2022.10.15 |
Python의 트위스트에 대한 깨끗하고 가벼운 대안? (0) | 2022.10.15 |
오류로 인해 MariaDB 백업 도구 Mariabackup이 실패 (0) | 2022.10.15 |
PHP의 'explode'는 Python에게 어떤 의미입니까? (0) | 2022.10.15 |