목차
날짜&시간
- MySQL의 날짜&시간 Data Type
- DATETIME에서 DATETIME(6) 처럼 숫자를 기입하게 되면 소수점 6자리인 0.000000초까지 저장해줍니다.
- 최대 6까지만 입력이 가능합니다.
- 날짜 & 시간 데이터를 입력할때는 문자처럼 기입하면 됩니다.
- DATE : 연-월-일 형태
- DATE 입력 예시
-
INSERT INTO newtable (날짜2) VALUES ("2024-01-01")
-
- DATE 입력 예시
- DATETIME : 연-월-일 시:분:초 형태
- DATATIME 입력 예시
-
INSERT INTO newtable (날짜) VALUES ("2024-01-01 12:05:00")
-
- DATATIME 입력 예시
- DATE : 연-월-일 형태
비교연산자
- 비교연산자
- 등호, 부등호를 사용해서 원하는 DATETIME 자료를 가져올 수 있습니다.
-
SELECT * FROM blog WHERE 발행일 > '2022-03-10 08:24:25'
-
SELECT * FROM blog WHERE 발행일 = '2022-03-10 08:24:25'
-
- 특정 날짜의 데이터 가져오기
-
SELECT * FROM blog WHERE 발행일 >= '2022-03-10 00:00:00' AND 발행일 < '2022-03-11 00:00:00'
- BETWEEN은 왼쪽 오른쪽 값을 모두 포함하는 이상,이하이기때문에 2022-03-11 00:00:00 데이터가 포함될 수 있습니다.
- 만약 이를 방지하기 위해 다음과 같이 BETWEEN '2022-03-10 00:00:00' AND '2022-03-10 23:59:59' 같이 지정해도 되지만, MySQL은 시간을 ms 단위까지 저장하기 때문에 2022-03-10 23:59:59.529 초 같은 데이터가 빵구날 수가있습니다.
- 아래처럼 date를 통해서 비교할수도 있는데 (date()안에 데이터를 넣으면 DATETIME -> DATE 형식으로 바꿔줍니다.) 이렇게 할 경우 index를 못 쓰는 방법이라 느릴 수 있습니다.
-
SELECT * FROM blog WHERE date(발행일) = '2022-03-10'
-
-
- 특정날짜부터 현재시간까지 발행된 글들만 가져오기
-
SELECT * FROM blog WHERE 발행일 > '2022-03-10 00:00:00' AND 발행일 <= now()
- now() 안에는 datetime(6)처럼 초단위 소수점 몇째짜리까지 알려주게 됩니다.
- 아래처럼 하게 될면 안될까요? -> 데이터베이스에는 미래 시간이 기록될 수도 있기때문에 항상 정확하게 조건을 주는 것이 좋습니다.
-
SELECT * FROM blog WHERE 발행일 > '2022-03-10 00:00:00'
-
-
날짜 포맷 변경하기
- DATETIME에 있는 년,월,일,시,분,초 정보를 이용하여 varchar로 변경해서 출력해줄 수 있습니다.
- %Y : 년도
- %m : 월
- %d : 일
- %H : 시
- %i : 분
- %s : 초
- 예시
-
SELECT date_format(now(), '현재는 %Y년도 %m월 %d일 %H시 %i분 %s초 입니다.')
-
시간 더하고 빼기
- INTERVAL 이용하기
- INTERVAL 기간
- YEAR, MONTH, DAY, HOUR, MINUTE, SECOND
- YEAR_MONTH, DAY_SECOND
- 예시
- NOW() + INTERVAL 1 YEAR
- 1년후 날짜 출력
- NOW() - INTERVAL 1 MONTH
- 1달전 날짜 출력
- NOW() + INTERVAL 3 DAY
- 3일후 날짜 출력
- NOW() + INTERVAL "1-2" YEAR_MONTH + INTERVAL "5 1:10:30" DAY_SECOND
- 현재시간으로부터 1년 2개월 5일 1시간 10분 30초 뒤의 날짜를 출력해줍니다.
- NOW() + INTERVAL 1 YEAR
- INTERVAL 기간
DATETIME 분리하기
- DATETIME은 다음 함수들을 이용하여 년도, 월, 일, 시, 분, 초을 분리할 수 있습니다.
- YEAR() , MONTH(), DAY(), HOUR(), MINUTE(), SECOND()
- 예시
- YEAR (NOW())
- SECOND(NOW())
예제
- login_record.csv
- id, first_name, email, last_login 정보가 있는 테이블 (어떤 사이트의 유저의 이름, 이메일, 9월부터 11월까지의 마지막 접속시간(DATETIME)이 저장된 테이블)
- 2022년 11월에 최소 1회 접속한 유저의 수를 구해보기
-
SELECT COUNT(*) FROM login_record WHERE last_login>="2022-11-01 00:00:00" AND last_login<"2022-12-01 00:00:00"
-
- 현재 테이블의 모든 날짜 시간에 1년을 더해서 출력하기
-
SELECT last_login + INTERVAL 1 YEAR FROM login_record;
-
- 9월의 짝수일에 해당하는 행만 출력하기
-
SELECT * FROM login_record WHERE MONTH(last_login)=9 AND DAY(last_login)%2=0
-
출처
'Database > MySQL' 카테고리의 다른 글
데이터 삽입 / 수정 / 삭제 (INSERT / UPDATE / DELETE) (0) | 2024.03.12 |
---|---|
권한 설정 (권한 축소된 계정 생성) (0) | 2024.03.12 |
SQL문 결과 테이블로 저장하기 / VIEW (1) | 2024.03.12 |
UNION (SELECT 결과들 합치기) (0) | 2024.03.12 |
JOIN (INNER, LEFT, RIGHT, FULL) (0) | 2024.03.12 |