티스토리 뷰

DB/MYSQL

MYSQL DATE

svdjcuwg4638 2023. 5. 13. 21:05

날짜 저장하려면 

 

MySQL

 

DATE YYYY-MM-DD 형식 9999년까지 저장가능
DATETIME YYYY-MM-DD hh:mm:ss 형식 9999년까지 저장가능
TIMESTAMP YYYY-MM-DD hh:mm:ss 형식 2038년까지 저장가능

 

TIMESTAMP는 현재 DB시간 기록용 말고는 잘 안씁니다.

테이블 만들 때 DATETIME(6) 이렇게 1~6 숫자를 넣으면 초단위 소수점 6자리까지 기록해줍니다. 

 

Postgres

DATE, TIME, TIMESTAMP, TIMESTAMPTZ가 있고

YYYY-MM-DD hh:mm:ss 형식으로 저장해주는 TIMESTAMP를 주로 씁니다.

TIMESTAMPTZ 쓰면 시간 뒤에 timezone도 함께 저장해줌  

 

Oracle

 DATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE 이거 3개 다 날짜 + 시간 저장해주는데 

TIMESTAMP는 날짜 + 시간(밀리초까지) 저장해줍니다.

TIMESTAMP WITH TIME ZONE 쓰면 날짜 + 시간(밀리초까지) + timezone도 함께 저장해줌

 

DATETIME 컬럼 가져오기

 

원하는 조건을 문자열 다루듯이 where절에 주면된다

SELECT * FROM blog WHERE 발행일 > '2022-03-10 08:24:25'
SELECT * FROM blog WHERE 발행일 = '2022-03-10 08:24:25' 

등호 부등호 사용해서 원하는 DATETIME 자료를 가져올 수 있습니다. 

 

원하는 날짜의 모든 행 가져오기

2022년 3월 10일이 찍혀있는 모든 행을 가져기

SELECT * FROM blog 
WHERE 발행일 >= '2022-03-10 00:00:00' 
  AND 발행일 < '2022-03-11 00:00:00' 

 

(참고1)

BETWEEN '2022-03-10 00:00:00' AND '2022-03-10 23:59:59' 이래도 되는데

요즘 MySQL에선 시간을 ms 단위까지 몰래 저장해두기 때문에 BETWEEN 쓰면 빵구날 수 있습니다

(참고2)

등호 말고 부등호는 발행일 < '2022-03-11' 이렇게 시간 빼먹어도 봐줍니다. 

 

현재 시간까지 발행된 글들만 출력하고 싶으면?

SELECT * FROM blog 
WHERE 발행일 > '2022-03-10 00:00:00' 

이렇게만 해도 될 것 같은데 

근데 DATETIME 컬럼엔 언제나 미래의 날짜시간도 저장할 수 있습니다. 

그래서 미래 시간이 기록되어있으면 그것도 잘 출력되는 불상사가 생길 수 있어서

2022년 3월 10일 ~ 현재시간이라고 정확히 조건을 주는게 좋습니다. 

SELECT * FROM blog 
WHERE 발행일 > '2022-03-10 00:00:00' 
  AND 발행일 <= now() 

현재시간이 필요하면 now() 쓰면 현재 날짜/시간을 그 자리에 남겨줍니다.

 

- now(6) 이렇게 쓰면 현재 날짜/시간을 초단위 소수점 6자리까지 알려줍니다.

- now()와 비슷한 curdate()도 있는데 이건 시간없이 현재 날짜만 알려줍니다.

SELECT * FROM blog WHERE date(발행일) = '2022-03-10' 

간혹 date() 쓰는 사람들이 있는데

date() 안에 데이터를 넣으면 DATETIME -> DATE 형식으로 바꿔줍니다.

그래서 검색시 그거 써도 되는데 index를 못쓰는 방법이라 느릴 수 있습니다. 

 

날짜 포맷 마음대로 바꾸기

년-월-일 순으로 출력해주는게 싫으면 다른걸로 맘대로 바꿀 수 있습니다. 

SELECT date_format(now(), '%Y년 %d일이고 %m월인데요')

date_format() 안에 날짜, 아무문자 차례로 집어넣으면 출력형식을 맘대로 바꿔줍니다. 

아무문자의 안엔 %Y, %m, %d 맘대로 넣을 수 있는데 각각 그 자리에 년, 월, 일이 들어옵니다.  

%H, %i, %s로 시, 분, 초도 넣을 수 있고 요일도 출력가능합니다.

자세한건 필요할 때 date_format 함수 검색해서 씁시다. 

 

새로운 행에 날짜 insert 하려면

INSERT INTO 테이블명 VALUES('2030-01-01 12:00:00'); 

대부분의 상황에선 날짜는 문자와 똑같이 취급하면 잘됩니다. 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함