본문 바로가기

DBMS/MySql

[mysql] 날짜 함수 date_format

mysql 의 날짜 함수 date_format().

아래는 date_format() 함수에서 사용하는 값이다.

FORAMT 

 설명 

 %M 

 월(Janeary, December, ...)

 %W

 요일(Sunday, Monday, ...)

 %D 

 월(1st, 2dn, 3rd, ...)

 %Y 

 연도(1987, 2000, 2013)

 %y

 연도(87, 00, 13) 

 %X 

 연도(1987, 2000) %V와 같이 쓰임.

 %x 

 연도(1987, 2000) %v와 같이 쓰임.

 %a 

 요일(Sun, Tue, ...)

 %d 

 일(00, 01, 02, ...)  

 %e

 일(0, 1, 2, ...) 

 %c 

 월(1, 2, ..., 12)  

 %b 

 월(Jan, Dec, ...) 

 %j 

 몇번째 일(120, 365) 

 %H 

 시(00, 01, 02, 13, 24) 

 %h 

 시(01, 02, 12)

 %I(대문자 아이)

 시(01, 02, 12)

 %l(소문자 엘)

 시(1, 2, 12) 

 %i 

 분(00, 01, 30) 

 %r 

 "hh:mm:ss AM|PM" 

 %T 

 "hh:mm:ss" 

 %S

 초 

 %s 

 초 

 %p

 AM, PM 

 %w 

 요일(0, 1, 2) 0:일요일 

 %U 

 주(시작:일요일) 

 %u 

 주(시작:월요일) 

 %V 

 주(시작:일요일) 

 %v

 주(시작:월요일) 

Example

The following script uses the DATE_FORMAT() function to display different formats. We will use the NOW() function to get the current date/time:

DATE_FORMAT(NOW(),'%b %d %Y %h:%i %p')
DATE_FORMAT(NOW(),'%m-%d-%Y')
DATE_FORMAT(NOW(),'%d %b %y')
DATE_FORMAT(NOW(),'%d %b %Y %T:%f')

The result would look something like this:

 

날짜 검색을 할때 조건절에 함수를 쓰면 인덱스를 타지 않는다.

예)

where date_format(regdate,'%Y-%m-%d') = '2013-10-16'

 

 

아래와 같이 변경하여 인덱스를 타도록 하면 검색 속도를 높일 수 있겠다.

 

 
where 검색컬럼 > '2000-01-01 00:00:00'  and 검색컬럼 < '2000-01-01 23:59:59' 
where 검색컬럼 between '시작날짜시간' and '종료날짜'

 

 

1, 2 번 아무거나 써도 무방하다.

 

date_format() 함수는 조건절 보다 select 절에 쓰면 좋을 듯 하다.

 

SELECT DATE_FORMAT(regdate,'%Y-%m') 
FROM temp 
WHERE regdate BETWEEN '2011-04-27' AND '2011-04-28'