>데이터 베이스 >MySQL 튜토리얼 >연도를 무시하고 향후 14일 이내에 기념일을 효율적으로 찾는 방법은 무엇입니까?

연도를 무시하고 향후 14일 이내에 기념일을 효율적으로 찾는 방법은 무엇입니까?

DDD
DDD원래의
2025-01-03 09:53:43398검색

How to Efficiently Find Anniversaries Within the Next 14 Days, Ignoring the Year?

날짜 계산에서 연도를 무시하는 방법

문제:
기념일이 있는 날짜를 선택하세요. 해당 연도를 제외한 다음 14일 구성 요소.

원래 쿼리:

SELECT * FROM events
WHERE EXTRACT(month FROM "date") = 3
AND EXTRACT(day FROM "date") < EXTRACT(day FROM "date") + 14

문제:
월이 줄바꿈하므로 이 쿼리에서는 다음 날짜 이후의 기념일을 놓칠 수 있습니다. 현재의 끝 월.

해결책:

1. 시리즈 생성 사용:

SELECT * FROM events
WHERE (date > '2013-03-01' AND date < '2013-04-01')

이 쿼리는 날짜 범위를 명시적으로 지정하여 연도를 무시합니다. 단, 기념일 기간에 따라 유동적이지 않습니다.

2. 날짜 수학 사용:

SELECT event_date FROM event_table
WHERE (event_date >= CURRENT_DATE AND event_date <= CURRENT_DATE + INTERVAL '14 days');

이 쿼리는 날짜 수학을 사용하여 기념일 날짜 범위를 계산합니다. 더 유연하지만 큰 테이블의 경우 성능이 느려질 수 있습니다.

3. 함수 사용(권장):

CREATE FUNCTION get_anniversary(date date) RETURNS date AS
BEGIN
  RETURN date PARTITION BY YEAR;
END;

SELECT event_date FROM event_table
WHERE get_anniversary(event_date) >= CURRENT_DATE
AND get_anniversary(event_date) <= CURRENT_DATE + INTERVAL '14 days';

이 쿼리는 날짜에서 연도를 제거하는 함수를 사용합니다. 고유한 연도별로 파티션을 생성하므로 큰 테이블의 경우 속도가 더 빨라집니다.

위 내용은 연도를 무시하고 향후 14일 이내에 기념일을 효율적으로 찾는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.