ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MySQL 날짜 조건 검색, BETWEEN과 부등호 차이점
    IT 2025. 4. 16. 07:20
    반응형

    날짜 조건으로 데이터를 조회할 때, BETWEEN을 써야 할지, >, < 부등호를 써야 할지 고민해본 적 있으신가요?

    그리고 yyyy-MM-dd와 yyyy-MM-dd HH:mm:ss의 차이점은 정확히 알고 계신가요?

    이번 포스팅에서는 MySQL을 사용할 때 헷갈리기 쉬운 날짜 조건 검색에 대해 정리해보았습니다.

    특히 실무에서 자주 마주치는 종료일 조건, 다음 날 계산, 포맷에 따른 차이 등을 한 번에 정리해드립니다.


    🔍 1. BETWEEN vs <, > : 정말 같을까?

    ✅ BETWEEN 사용 예시

    SELECT * FROM orders
    WHERE created_at BETWEEN '2024-01-01' AND '2024-01-31';

    위 쿼리는 다음과 같은 의미입니다.

    created_at 값이 '2024-01-01 00:00:00' 이상 AND '2024-01-31 00:00:00' 이하인 값

    즉, yyyy-MM-dd 형식만 넣으면, **시분초는 '00:00:00'**으로 자동 처리됩니다.

    결과적으로 2024-01-31 00:00:00 이후의 값은 조회되지 않기 때문에, 1월 31일 하루 전체가 누락될 수 있습니다.


    ✅ <, > 부등호 연산자 사용 예시

    SELECT * FROM orders
    WHERE created_at >= '2024-01-01'
    AND created_at < '2024-02-01';

    이 방법은 매우 명확하게 동작합니다.

    • 2024-01-01 00:00:00부터 시작해서,
    • 2024-02-01 00:00:00 직전까지

    즉, 1월 31일의 23시 59분 59초까지 모든 데이터를 포함합니다.

    이 방식이 가장 실수 없이 안정적인 날짜 범위 필터링 방법입니다.


    📆 2. 날짜 포맷에 따른 차이점: 'yyyy-MM-dd' vs 'yyyy-MM-dd HH:mm:ss'

    MySQL은 날짜 비교에서 문자열을 내부적으로 DATETIME 타입으로 변환합니다.

    그러나 시간 정보가 없으면 기본값은 00:00:00으로 간주됩니다.

    📌 예시

    -- 같은 날짜지만 시간 정보가 있는지에 따라 다르게 처리됨
    WHERE created_at <= '2024-01-31'           -- → 2024-01-31 00:00:00 이하
    WHERE created_at <= '2024-01-31 23:59:59'  -- → 2024-01-31 하루 전체 포함

    실수 방지 팁:

    • 종료일 조건에는 반드시 다음 날 00시를 미만(<) 조건으로 사용하는 것이 안전합니다.

    🧮 3. 다음 날로 바꾸는 MySQL 함수

    종료일을 지정하고, 다음 날로 자동 계산하고 싶을 땐 DATE_ADD()를 사용하세요.

    ✅ 예시 1: 종료일 다음 날 계산

    SELECT DATE_ADD('2024-01-31', INTERVAL 1 DAY);
    -- 결과: 2024-02-01

    ✅ 예시 2: 조건에 활용

    SELECT * FROM orders
    WHERE created_at >= '2024-01-01'
    AND created_at < DATE_ADD('2024-01-31', INTERVAL 1 DAY);

    위 방식은 다음과 같은 상황에서 유용합니다.

    • 사용자가 선택한 날짜 범위를 신뢰할 수 없을 때
    • 프론트엔드에서 '2024-01-31'만 내려왔을 때
    • 하루 단위 검색이 필요할 때

    ✅ 정리: 날짜 조건은 이렇게 써보세요!

    목적 추천 조건 방식

    날짜 범위 전체 포함 >= 시작일 AND < 다음날(종료일 + 1)
    하루만 조회 DATE(created_at) = '2024-01-31'
    특정 시간 포함 'yyyy-MM-dd HH:mm:ss' 형식 명시

    📝 마무리하며

    MySQL에서 날짜 검색은 정말 사소한 차이로 원하는 결과를 얻지 못할 수 있습니다.

    특히 BETWEEN은 끝 값의 시간까지 고려하지 않으면 의도와 다른 결과가 나올 수 있어 주의가 필요합니다.

    앞으로는 날짜 검색할 때 < 다음날 방식으로 깔끔하고 안전하게 처리해보세요!

    반응형
Designed by Tistory.