나이계산하는 쿼리는 은근히 많이.사용한다. 나이계산하는 부분만 긁어서 파헤쳐 보겠다. 어렵게 사용하고 있지만, 하나씩 쪼개보면 별거 없다. 단지 목잡해 보일뿐...
나이계산하는 부분만 가져왔다. SELECT나 WHERE절에 사용하면 유용하다.. 실제로 써 보면 알 것이다.
[알아볼 부분]
WITH TEMP AS (
SELECT '1901021000000' AS PNUM
FROM DUAL
)
SELECT
TRUNC( ( ( TO_CHAR(SYSDATE, 'yyyymmdd') - DECODE(SUBSTR(PNUM, 7,1),
'3','20' || SUBSTR(PNUM,1,6),
'4','20' || SUBSTR(PNUM,1,6),
'1','19' || SUBSTR(PNUM,1,6),
'2','19' || SUBSTR(PNUM,1,6),
'0','18' || SUBSTR(PNUM,1,6),
'9','18' || SUBSTR(PNUM,1,6))) / 10000),0)
FROM TEMP
;
하나씩 쪼개 보겠다.
위에 있는 WITH TEMP AS 부분은 가상으로 데이터를.만드는 부분이다.
데이터가 없을 때 유용하며, WITH 뒤에 있는 TEMP는 가상의.태이블 이름이다. 연습하거나 데이터 가공시 편리하다.
TRUNC(계산된값,0) 으로 되어 있는것은 계산된 값을 잘사한다. 0이면 소숫점 아래 수는 버린다. 1이면 첫째자리, 2이면 둘째자리까지표시한다.-1은1의자리, -2는.십단위로 바뀐다.
TO_CHAR(SYSDATE,'YYYYMMDD')
이 부분은 SYSDATE(현재날짜)를 'YYYYMMDD'형태로 변환한다.
DECODE(SUBSTR(PNUM, 7,1),
'3','20' || SUBSTR(PNUM,1,6),
'4','20' || SUBSTR(PNUM,1,6),
'1','19' || SUBSTR(PNUM,1,6),
'2','19' || SUBSTR(PNUM,1,6),
'0','18' || SUBSTR(PNUM,1,6),
'9','18' || SUBSTR(PNUM,1,6))
이 부분은 DECODE구문인데, DECODE는 IF랑 비슷하다. 그 안에 있는 SUBSTR먼저 보도록 하자.
SUBSTR은 '문자'를 '시작번호'에서 '길이'만큼 쪼갤때 사용한다.
PNUM의 내용 '1901021000000'를 시작번호 '7'부터 길이'1'만큼 자른다. 그러면 '1'이 됩니다.
그 뒤에 비교하는 부분이 나오는데, 하나씩 본다면
'3'이면 '20' || SUBSTR(PNUM,1,6)
이 부분은 '20'하고 뒤에 PNUM을 1에서 6길이만큼 자른값을 합친단 의미이다. DECODE처음 시작 부분의 값은 '1'이므로 이 구문은 건너뛰어 다음 구문으로 간다.
다음구문도 '4'이면...위의 내용과 동일하게 자른걸 붙인다 인데, 이것도 아니므로 다음..
'1'이면 '19' 와 뒤의 SUBSTR(PNUM,1,6)과 합친다.
'19' || '190102'
'19190202'
이런 형태가 된다.
TRUNC((('현재날짜' - '19190102') / 10000),0)
이런 간단한 형태로 생각할 수 있다. 이렇게 하면 복잡해 보이는 부분도 쪼개서 하나씩 보면 편하게 볼 수 있다.
'티끌팁' 카테고리의 다른 글
DB function 만들기 (0) | 2020.11.17 |
---|---|
[모바일환경 youtube studio] 저작권없는 음악다운 (0) | 2020.11.16 |
[스마트폰으로 블로그 관리] 구글 애드센스 스크립트 추가방법 (0) | 2020.11.09 |
[앱으로 보는 액셀함수] 원하는 길이만큼 왼쪽에 특정문자 추가 - REPT (0) | 2020.11.07 |
[앱으로 보는 액셀 함수] COUNTIF, COINTIFS 함수 활용하기 (0) | 2020.11.05 |