MySQL에서 오늘 로그인한 사용자를 조회하려면 아래의 문법을 사용하면 됩니다. 여기서는 날짜(datetime) 필드가 문자열 타입으로 저장되어 있다고 가정합니다.
SELECT yourColumnName1, yourColumnName2, yourColumnName3, ...N FROM yourTableName WHERE STR_TO_DATE(yourColumnName1, 'format') = CURDATE();
예제 테이블 준비
설명을 위해 사용자의 이름과 성, 그리고 로그인 날짜를 저장하는 DateEqualToday 테이블이 있다고 가정해 보겠습니다.
+------+------------+-----------+------------+ | Id | First_Name | Last_Name | LoginDate | +------+------------+-----------+------------+ | 1 | James | Smith | 20-12-2018 | | 2 | Carol | Taylor | 21-12-2017 | | 3 | John | Smith | 21-12-2018 | | 4 | Maria | Garcia | 22-12-2018 | | 5 | Mike | Davis | 21-12-2018 | | 6 | Bob | Wilson | 21-12-2018 | +------+------------+-----------+------------+ 6 rows in set (0.00 sec)
오늘 로그인한 사용자 필터링 쿼리
오늘 로그인한 사용자만 골라내려면 저장된 날짜와 CURDATE() 함수의 반환값을 비교하면 됩니다. CURDATE()는 현재 날짜만 반환하기 때문에 시간 정보 없이 정확한 비교가 가능합니다.
아래 쿼리는 STR_TO_DATE() 함수로 문자열 형태의 LoginDate 값을 날짜 타입으로 변환한 뒤, 오늘 날짜와 일치하는 행만 조회합니다.
mysql> SELECT Id, First_Name, LoginDate
-> FROM DateEqualToday
-> WHERE STR_TO_DATE(LoginDate, '%d-%m-%Y') = CURDATE();실행 결과
+------+------------+------------+ | Id | First_Name | LoginDate | +------+------------+------------+ | 3 | John | 21-12-2018 | | 5 | Mike | 21-12-2018 | | 6 | Bob | 21-12-2018 | +------+------------+------------+ 3 rows in set (0.00 sec)
핵심 포인트 정리
- STR_TO_DATE(컬럼명, '%d-%m-%Y'): 문자열로 저장된 날짜를 지정된 형식에 맞춰 DATE 타입으로 변환합니다. 실제 데이터의 날짜 형식에 따라 포맷 문자열을 조정해야 합니다.
- CURDATE(): 현재 날짜만 반환하므로, 시간까지 고려해야 하는 경우에는
NOW()나DATE(login_datetime)방식을 검토할 수 있습니다. - 날짜 컬럼을 처음부터 DATE 또는 DATETIME 타입으로 설계하면 매번 변환할 필요가 없어 인덱스 활용과 성능 면에서 유리합니다.