[Udemy]/Oracle SQL(Imtiaz Ahmad)

20. Numeric and Date Data type SRFs

Ben의 프로그램 2023. 9. 12. 20:48
728x90
Numeric SRFs
첫 번째로 살펴볼 함수는 Round 함수입니다. 우선 이 함수는 2개의 인자를 받는데요. 첫 번째 인자로는 숫자 혹은 컬럼을 받고 두 번째 받을 인자로는 반올림할 위치값을 받습니다. 0.1 의 위치는 0입니다. 또한, Round 의 두 번째 인자의 Default 값은 0 인데요. 그래서 Round(147.5) 를 실행하면 148 이 반환되는 것을 확인할 수 있습니다. 

다음으로 살펴볼 함수는 TRUNC 함수입니다. TRUNC 함수는 두 번째 인자로 주어진 자릿수 이하의 숫자를 버려주는 함수인데요. 예를 들어 5를 입력하면 6번째 자리수 이하의 자리들을 다 버리는 것을 확인할 수 있습니다. 이 함수의 Default 값도 마찬가지로 0이기 때문에 TRUNC(102.123) 을 실행하면 102 을 반환해주게 됩니다. 여기서 주의할 점은 102.0 이 아닌 102 가 반환된다는 점인데요. TRUNC 라는 말 그 자체의 의미처럼 자리수 까지도 같이 버려주기 때문에 그렇습니다.

 

Date Data Type
제일 먼저 날짜와 관련된 함수 중에 먼저 살펴볼 함수는 sysdate 인데요. 말 그대로 System 의 date 를 출력해주는 함수입니다. 위에서 보는 것과 같이 시스템의 월/일/년 정보를 출력하고 있는 것을 확인할 수 있습니다. 

다음으로 살펴볼 함수는 systimestamp 입니다. sysdate 와 마찬가지로 인자를 갖지 않기 때문에 Parenthesis 가 필요하지 않습니다. systimestamp 함수는 sysdate 보다 더 자세하게 시간과 분, 초 까지 출력되고 있는 것을 확인할 수 있습니다. Fraction number(소수점)과 Timezone 에 대한 값도 함께 출력해서 볼 수 있는 것이 특징입니다. 

다음으로 살펴볼 함수는 ADD_MONTHS( date, addnum ) 함수입니다. ADD_MONTH 함수는 2개의 인자를 갖는데요. 첫 번째 인자는 날짜를 받고, 두 번째 인자에는 더할 월의 수를 입력합니다. 여기서 재밌는 점은 두 번째 인자로 음수 값을 주면 과거의 날짜 정보를 받을 수도 있다는 점입니다. 

위와 같이 2달전이 언제인지 확인할 수도 있습니다. 

sysdate 와 add_month 함수는 함께 자주 사용하기도 하는데요. 현재 날짜로부터 1달전 혹은 한 달 후의 날짜 정보를 아주 손쉽게 확인할 수 있기 때문입니다. 

다음으로 살펴볼 함수는 MONTHS_BETWEEN 함수인데요. 이 함수도 2개의 인자를 갖습니다. 두 인자 사이의 개월 수 차이를 계산해주는데요. 재밌는 점은 첫 번째 인수 - 두 번째 인수이 결과값을 보여주기 때문에 위의 그림처럼 음수가 나올 수 있다는 점입니다. 

그 다음으로 살펴볼 함수는 TRUNC 함수인데요. 숫자에서 사용했던 것처럼 날짜 데이터에서도 TRUNC 함수를 사용해서 필요없는 데이터를 지워버릴 수 있습니다. 예를 들어서 Trunc(systimestamp) 를 수행하면 월/일/년도 까지만 출력되고 시/분/초 등의 정보들은 출력되지 않는 것을 확인할 수 있습니다. 

이런 TRUNC 함수를 두 번째 인자와 함께 사용할 수 있는데요. 예를 들어서 'YEAR' 라는 두 번째 인자와 함께 사용하면 년도의 데이터를 제외한 나머지 데이터들은 첫 번째 값으로 자동 세팅되어서 출력됩니다. 

컬럼과 함께 사용하면 위의 예시처럼 활용할 수 있습니다. 

이런 TRUNC 함수의 특징을 활용하면 Where 절을 통해서 특정 년도에 채용된 사람들만 확인하는 것이 가능해집니다. 지금 우리가 보고 있는 이런 TRUNC 함수들이 모두 SRF 들인데요. SRF 들은 single input 을 받아서 single output을 반환하는데요. 이런 특징 때문에 Where 절에서 우리는 SRF를 사용할 수 있습니다. 왜냐하면 Where 절은 기본적으로 모든 record 를 하나씩 Filtering 하는 것이 주 임무이기 때문에 모든 행에 각각 적용되어 각각 결과를 반환하는 SRF 을 사용하기에 안성맞춤인 것이죠.