MySQL

#7 프로그래밍 개발자 교육 - SQL : 함수(function) 사용법 - 날짜/시간

존버맨 2020. 5. 16. 05:08

  이번에는 날짜와 시간에 관련된 function 사용법을 설명해 드리겠습니다. 개인적으로 느낀 점은 MySQL의 날짜/시간 function 사용법은 Oracle 보다는 DB2와 비슷하다는 느낌이 듭니다. 

 

 

   § 날짜/시간 function 들

 

▶ 현재일과 시간 구하기 - now(), curdate(), curtime(), 그리고 currend_date(), current_time(), current_timestamp()

 

  현재일과 시간을 구하는 구하는 함수들입니다. 현재일자만 구할 때는 curdate()를 사용하고 시간까지 구하고 싶을 때는 current_time()이나 now()를 사용합니다. 그리고 특이한 것이 curdate() +숫자를 적용할 수 있습니다. 이거 실수를 꽤하는 걸로 아는데, 날짜계산이 아닙니다. currdate() + 숫자는 yyyy-MM-dd 형태의 날자를 숫자형태로 yyyyMMdd 를 구합니다. 그냥 숫자에요 거기다가 + 숫자연산을 하는 겁니다. + 뿐만아니라 사칙연산이 다 가능합니다. 급하게 개발하다보면 연말이나 연초가 아닌 이상 값이 같아서 실수를 하게 되는데 날짜계산도 function을 사용합니다. Oracle 예기를 알할 수 없는데 Oracle은 현재일시를 sysdate 로 쓰는데 sysdate + 1 하면 이건 날짜 계산이 되서 내일이 됩니다. 

 

▶ 날짜 시간 계산 - date_add(), data_sub(), adddate(), addtime()

 

  날짜에 하루를 더한다던지 해외시간을 구하기위해 시차를 가감하기위한 날짜/시간 계산 function 들에 대해 설명을 드립니다. 우선 위에서 날자에 단순 산술로 숫자를 대입해서는 날짜계산이 안된다는 설명을 꼭 기억해 두시길 바랍니다. 일단위위를 가산하기 위해서는 date_add()를 쓰면 됩니다. 첫번째 인자는 대상일자가 되고 두번 째 인자는 가산할 일수를 넣습니다. 일수를 차감하기위해서는 data_add()를 쓰되 두번재 인자를 음수로 대입하거나 data_sub() 를 사용하면 됩니다. adddate() 함수도 있는데 이건 동의어라 date_add()와 같은 기능을 제공합니다. 일단위 뿐아니라 초단위, 그리고 아래 예제에는 없지만 밀리 초단위도 계산이 가능한 addtime() 이 있습니다. Addtime()을 쓸 때 가감할 시간을 넣을 때는 아래 예제에 나왔듯이 형식을 지켜주셔야 합니다. 

 

  날짜 / 시간 계산은 위에서 설명한 것다 좀더 복작하게 적용할 수 있습니다. 좀 복잡하게 느껴질 수도 있는데, 사실 자세히 보면 패턴이 같습니다. 일단위와 시분초는 interval 뒤에 문자 형으로 더할 값을 제시하고 위에 DAY_{HOUR, MINUTE, SECOND} 로 포맷에 맞게 지정하면 됩니다. 시작은 DAY로 하고 끝은 더할 시간의 끝 단위를 기술하는 거죠. MONTH, YEAR, WEEK 단위로도 적는 이 때는 시간단위는 못쓰는 걸로 알고 있습니다. 예제를 몇개 해봤는데 역시 안되더군요. 

 

 

▶ 시간/일 차이 - timediff(), datediff(), 그리고 time_to_sec(), sec_to_time()

 

  경과시간을 구하는 경우에 유용한 시간 혹은 일 차이를 구하는 function입니다. 주의하셔야할 것이 있는데 datediff()는 일단위로 계산합니다. 아래 차이3 예제 처럼 시분초를 넣어도 오류없이 시분초는 절사하고 계산해 버리기 때문에 개발실수를 모르고 넘어갈 수 있습니다. 시간까지 할려면 timediff를 쓰십시오. 그리고, 차이가 몇초인지 구하는 경우가 많을 겁니다. 차이4를 나오는 예제를 환산1은 초단위로 계산한 것입니다. 또 반대로 환산2는 초단위를 차이4번 예제 처럼 시분초 단위로 바꾸는 편리한 기능도 있습니다. 이걸 코딩에서 작업할려면 몇줄 코딩이 들어가야 하기때문에 SQL에서 하면 굉장히 개발에 소요되는 시간을 아낄 수 있을 것입니다.

 

 

 

▶ 날짜 포맷 출력 - date_format()

 

  날짜를 원하는 형식으로 출력하기위해서는 date_format()을 사용합니다. 2번째 인자가 날짜를 어떻게 출력해 줄지를 결정하는 것인데 %알파벳으로 쓰는데, a~z 까지 다 있는 거 같아요. 공부삼아서 한번 해보는 것도 재밌겠는데, 구글링해서 date_format() 검색하면 자세히 나와 있으니까 필요한 것만 몇개 정리했다가 쓰시는 것도 괜찮겠습니다. 요일같은 경우에는 영문으로 나오는데 한글로 나오게 하기 위해서는 별도의 조치가 필요합니다. 이 별도의 조치라는 것이 MySQL 자체에서는 안되는 것으로 알고 있습니다. 제가 생각해둔 과정이 있으니 그 때 다시 설명하기로 하고 지금은 출력 가능한 형식이 어떤 게 있는지 보는 정도로 봐주시길 바랍니다. 

 

 

  아래는 자주 쓰이는 날짜 출력형식입니다. 물론 한국에서요. 외국은 출력을 좀 다르게 하는 거로 알고 있습니다. 미국만 봐도 날짜서수 월, 년도로 표현하잖아요. 따옴표 안에 %알파벳 외에 글자는 그대로 출력되는 것을 보실 수 있습니다. 이걸이용해서 원하는 출력형식을 마음대로 편집할 수 있습니다. 현실적으로 가장 많이 쓰이는 형식을 년도4자리-월-일과 시각까지 붙인다면 24시:분:초 형식이라고 봅니다. 24시:분:초 형식은 %T 로 간단하게 지정할 수 있습니다. 오전/오후 형식은 %r로 합니다.

 

 

  날짜 형식을 다루는 여러가지 function을 다루어 봤습니다. 이것 외에도 사실 많습니다만 몇번 언급했다시피 자주 쓰는 편인 것만 정리했습니다. 혹시 싶은 것이 있으면 그때 구글링 하면 쉽게 정보를 구할 수 있습니다. 그만큼 MySQL은 참조할 곳이 무궁무진합니다. 이제 숫자, 문자, 날짜를 다루는 function을 한번 쭈~욱 훑어 봤습니다. 이제 다음 시간에는 조금더 상위과정으로 가보겠습니다. 수고하십시오.