반응형

날짜를 저장할 때는 일반적으로 칼럼을 날짜 타입으로 만듭니다.

저장할 때는 쉽게 하는데, 막상 검색을 해서 가져오려고 하면 헤매는 경우가 종종 있습니다.
문자 타입이 아니다 보니, 칼럼을 문자로 변형하여 가져오곤 하는데요.
이 경우 전체 테이블의 칼럼을 문자로 변환을 하고 데이터를 가져오기 때문에
해당 칼럼에 인덱스가 있다고 하더라고 Full Scan을 하여 조회 속도가 느려지게 됩니다.
처음 데이터가 많지 않을 때는 속도를 체감하지 못하지만
데이터가 누적이 되면서 점점 느려지는 속도를 확인하시게 됩니다.

잘못된 데이터 조회 방법 예시

SELECT *
  FROM {$TABLE}
 WHERE DATE({$COLUMN}) BETWEEN '2019-10-01' AND '2019-10-15'

위의 * 표시는 예시입니다.
실제 사이트 운영 시에는 * 아닌 각 칼럼들을 나열해 주시는 게 좋습니다.

그럼 어떻게 조회를 하는 것이 좋을까요?
해당 칼럼에 데이터를 시:분:초까지 넣어서 날짜 유형으로 변형을 하고 조회를 하시면 됩니다.

1. 자동 형변환을 이용하여 조회하기

1) MySQL은 '2019-10-01'같이 String으로 입력을 해도 자동으로 날짜 타입으로 변환하여 조회를 합니다.
2) 날짜 타입으로 자동 변환이 될 때는 YYYY-MM-DD 00:00:00 으로 됩니다.
그래서 뒤의 날짜는 원하는 날짜 +1일을 하셔야 합니다.

SELECT * FROM {$TABLE}
 WHERE {$COLUMN} BETWEEN '2019-10-01' AND '2019-10-15'

2. MySQL 문법에 맞게 조회하기

1) 원하는 날짜에 시:분:초를 추가하여 입력하여 주세요.
2) 뒤의 날의 날짜는 23:59:59로 추가하여 주셔야 다 조회가 됩니다.

SELECT * FROM {$TABLE}
 WHERE {$COLUMN} BETWEEN STR_TO_DATE('2019-10-01 00:00:00','%Y-%m-%d %H:%i:%s')
    AND STR_TO_DATE('2019-10-14 23:59:59','%Y-%m-%d %H:%i:%s')

위의 예제들은 특정 기간을 조회하는 SQL입니다.

하지만, 최근 일주일과 같이 현재 날짜를 기준으로 데이터를 조회하는 경우가 있습니다.
이 경우는 위이 SQL에서 날짜를 계산하여 조회를 하셔도 되지만 MySQL함수를 이용하여
좀 더 쉬게 조회를 할 수 있습니다.

​1. 최근 일주일 데이터 조회

SELECT * FROM {$TABLE}
 WHERE {$COLUMN} > DATE_SUB(NOW(), INTERVAR 7 DAY)

​2. 최근 1개월 데이터 조회

SELECT * FROM {$TABLE}
 WHERE {$COLUMN} > DATE_SUB(NOW(), INTERVAR 1 MONTH)

3. 최근 1년 데이터 조회

SELECT * FROM {$TABLE}
 WHERE {$COLUMN} > DATE_SUB(NOW(), INTERVAR 1 YEAR)

MySQL 날짜 타입 칼럼 데이터(Date Type column Data) 조회(검색) 방법 - STR_TO_DATE, DATE_SUB 활용

반응형

+ Recent posts