- trunc
  소수점 이하 특정수치까지 표현할때 사용할수 있다. 소수있는 데이터를 소수없이 정수로만 표현할때도 사용한다.

 

  trunc(임의의데이터, [x])
  X = 소수점을 표현할 자릴수를 의미.
      0은 정수만 표현하며, 이는 X를 기입하지 않는 경우 trunc는 자동으로 0으로 인식한다.
      -1은 10의 자리까지만 보여주고 이하는 버리라는 의미. -2는 100의 자리까지 보여주라는 것.

 


- mod
  특정데이터를 나누었을때 남는 나머지값을 보여줌.

 

  mod(임의의데이터, [X])
  X = 임의의데이터를 나눌 값을 입력.
    2를 입력하면 임의의데이터를 2로 나눈후 나머지 값을 출력하고.
    5를 입력하면 임의의데이터를 5로 나눈후 나머지 값을 출력.

※ 시간에서 시간을 빼면 그 결과값은 일수로 출력된다.

 

- months_between
  입력된 두 날짜를 기준으로 몇개월차이나는지 확인.

 

 

  months_between([X], [Y])
  X, Y = 입력될 데이터는 날짜형식에 맞추어(ex: 2001-01-01) 입력하면 별도로 타입변형을 하지 않아도 됨.

 

- last_day
  해당 날짜가 속한 달의 매월 마지막날이 몇일인지 출력

 

 

 

- next_day
  지정된 돌아올 요일이 해당하는 날짜

 

 

  next_day(sysdate, '일')
  next_dat('2012-09-07', '월') -- 2012-09-07을 기준으로 월요일이 돌아올 날짜 -- 출력값은 12/09/10

 

 

 

 

 

 


복습 및 응용.

1. 1년 2개월 3일 4시간 5분 6초를 초로 환산하기.

2. 환산된 초를 년월일시간분초 형태로 나타내기

3. 경매번호, 경매물건, 경매종료시각으로 구성된 테이블에서
   현재로부터 남은기간은 얼마인지 나타내기

4. 26개월을 복무기간으로 입대한다. 제대까지 먹어야할 끼니는 몇번 먹을까.

5. 사용자 khman1에서 만든 jikwon 테이블을 기준으로 아래와 같이 나타내기.
   단, 정년퇴직일자는 해당사원의 나이(한국나이)로 60세가 되는 년도의 입사일자로 한다.
   ----------------------------------------------------
    사원명      현재나이     입사일자     정년퇴직일자
   ----------------------------------------------------


WRITTEN BY
빨강꼬마

,

- sysdate
  현재 시스템 시각을 보여줌. (=current_date)

- to_char
  숫자 및 날짜 타입을 문자로 변환시켜주는 함수.
 

select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss')
from dual;

 

 - to_char(sysdate, '[X]') *목요일인경우
          X = day   : 목요일 로 출력
          X = dy    : 목   으로 출력
          X = d     : 5      로 출력(1~7까지로 일~토 별로 대입. 예로 3인경우 화요일)
          X = ddd   : 현재 년도의 1월 1일로 가서 오늘의 날짜까지 총 몇일째인지 출력
          X = dd    : 현재의 월의 1일로 이동해서 현재의 날짜까지 총 몇일째인지 출력. 즉, 현재의 일자.
          X = sssss : 현재 일자가 시작된 0시0분0초부터 현재까지 총 몇초째인지 초단위로 출력.
          X = year  : 년도만 (=yyyy와 동일)
          X = month : 월만   (=mm과 동일)
          X = hh    : 시간
          X = mi    : 분
          X = ss    : 초
          X = q     : 올해 4분기중 현재 속하는 분기를 출력.

※ hh24에서 24시간제로 표시하는 것을 am 혹은 pm으로 변경할 수 있음
※ 날짜는 -으로 구분, 시간은 :으로 구분.

 

 - to_char(123.456, 9999.99)
          123.456을 정수4자리 와 소수점이하2자리로 표현하라 라는 의미.
          9999.99앞에 통화기호를 쓰면 결과에 포함되며, 통화기호를 L로 기재하면 운영체제등을 기반으로 소속국가의 통화량으로 표기.
         

- extract
  날짜 데이터에서 날짜를 숫자타입으로 뽑을때 사용.
  * extract(year from sysdate)
  * extract(month from sysdate)
  * extract(day from sysdate)

 

select extract(year from sysdate), extract(month from sysdate), extract(day from sysdate)
from dual;

 

- to_number
  문자타입을 숫자로 변환시켜주는 함수.

 

select '000001', to_number('00001')
from dual;

 


- to_date
  문자타입을 날짜타입으로 변환시켜주는 함수.

 

select sysdate + 1, sysdate - 1
from dual;

※ 날짜데이터에 +1 이나 -1을 입력하면 하루로 계산되어 결과데이터(날짜)가 출력됨
※ 현재날짜는 sysdate로 처리하면 날짜타입이므로 +나 -로 처리가능하나,
   임의날짜를 입력하면 문자형태로 입력되기 때문에 to_date로 처리하여 날짜타입으로 변경하여 처리해야함.

 

- add_months(임의의날짜, [X])
  임의의 날짜로 부터 X개월 만큼 추가

 

select add_months(sysdate, 1), sysdate, add_months(sysdate, -1)
from dual;

 

  ex: 현재로 부터 1년 2개월 3일 4시간 5분 6초 뒤를 출력

select to_char(sysdate, 'yyyy-mm-dd hh24:mm:ss'),
       to_char(add_months(sysdate, 12*1+2) + 3 + 4/24 + 5/(24*60) + 6/(24*60*60), 'yyyy-mm-dd hh24:mm:ss')
from dual;


 

- to_yminterval('yy-m') / to_dsinterval('ddd hh:dd:ss')
  오라클9g 부터 지원되는 명령어
  add_months(sysdate, 12*1+2) 와 sysdate + to_yminterval('01-02') 는 동일.

 

 

 

 

 

 

 

문제1. case문을 사용하여 to_char(sysdate, 'd')를 이용, 현재 요일을 숫자가 아닌 요일명으로 출력하게 하는 쿼리문을 작성하라.

 

문제2. 아래의 그림처럼 처리하는 쿼리문을 작성하라.

 

 

 

 

 

 

 

답.1.

select case to_char(sysdate, 'd')
            when '1' then '일요일'
            when '2' then '월요일'
            when '3' then '화요일'
            when '4' then '수요일'
            when '5' then '목요일'
            when '6' then '금요일'
            when '7' then '토요일'
            else '없음' end as "오늘의 요일명"
from dual;

 

답.2 (이외 쿼리문도 결과만 같으면 됨)

select saname as "사원명",
            extract(year from sysdate) - ( substr(jubun, 1, 2) + case when substr(jubun, 7, 1) in ('1', '2') then 1900 else 2000 end) + 1 as "현재나이",
            case when substr(jubun, 7, 1) in ('1', '3') then '남' else '여' end as "성별"
from jikwon;


WRITTEN BY
빨강꼬마

,

- reverse: 해당 문자열을 거꾸로 보여주는 함수

 

select
'oracle', reverse('oracle'),
'KH정보교육원', reverse('KH정보교육원'),
reverse( reverse('KH정보교육원'))
from dual; 



 

- length: 해당 문자열의 글자수를 알려주는 함수

 

select
'KH정보교육원', length('KH정보교육원')
from dual; 

 


- lengthb: 해당 문자열의 byte수를 알려주는 함수

 

select
'KH정보교육원', lengthb('KH정보교육원')
from dual;

 


- instr: 어떤 문자열에서 특정한 글자(단어)가 몇번째 위치에 있는지를 알려주는 함수

 

select
'oracle dba database baseball',
instr('oracle dba database baseball', 'ba', 1, 1), -- x y -- x는 출발지점. y번으로 ba가 나오는 위치 (공백포함)
instr('oracle dba database baseball', 'ba', 1, 2), -- 1번째부터 출발하고 2번째로 나오는 ba위치(공백포함)
instr('oracle dba database baseball', 'ba', 1, 3),
instr('oracle dba database baseball', 'ba', 1, 4),
instr('oracle dba database baseball', 'ba', 1, 5), -- 5번째는 없으므로 결과값 0이 나옴
instr('oracle dba database baseball', 'ba', 10, 1), -- 10번째부터 출발해서 결과가 16
instr('oracle dba database baseball', 'ba', 1), -- y값 ,1 이 생략된것
instr('oracle dba database baseball', 'ba', 10) -- y값 ,1 이 생략된것
from dual;

 


- ltrim:  어떤 문자열에서 왼쪽에서 부터 특정글자를 제거시켜주는 함수
  - 왼쪽부터 지우다가 공백 혹은 지정하지 않은 다른 문자를 만나면 정지하고 거기까지 출력
  - 별도의 값을 지정하지 않은 경우 공백을 삭제

 

select
'aabbccccddd bdbdacoabcadcbabdbcba',
ltrim('aabbccccddd bdbdacoabcadcbabdbcba', 'abcd'),
'aabbccccdddbdbdacoabcadcbabdbcba',
ltrim('aabbccccdddbdbdacoabcadcbabdbcba', 'abcd')
from dual;

 

select
'이' || '                            순신' ,
'이' || ltrim('                            순신') -- ltrim에서 별도의 값을 안쓸경우 공백을 삭제
from dual;

 


- rtrim: 어떤 문자열에서 오른쪽에서 부터 특정글자를 제거시켜주는 함수

 

- decode
  decode(a, b, c, d, e, f): A가 B면 C를 출력하고, A가 D면 E를 출력하고, B나 C가 아닌경우 F를 출력하게함

select decode(5-2, 1, '5-2 = 1입니다.', 3, '5-2 = 3입니다.', '나는 산수를 몰라요')
from dual;

 

 

- case when then else end (암기)
ⓐ 기준 데이터가 등호 (=)(ex:5-2 와 같이 3이라는 데이터가 명확) 일 경우

case [A] when [B] then [C] else [D] end: A가 B면 C를 출력하게 하고 그외 값일 경우 D를 출력하게 함.
                                         다만, when ~ then ~ 절은 when ~~ then ~~ 다음 추가로 사용할 수 있음.

 

ⓑ 기준 데이터가 크거나 작은 범위형 데이터(ex: 5보다 크다 혹은 5보다 작다)일 경우

 

(*): >(크다), <(작다), =(같다)등의 특정 부등호를 의미
case when [A (*) B] then [C] else [D] end: A가 B보다 (*)일때 C를 출력하게 하고, 그외 값일 경우 D를 출력하게 함.
                                           다만, when ~ then ~ 절은 when ~~ then ~~ 다음 추가로 사용할 수 있음. 

 

 

 

1. 아래의 테이블을 해당 결과 데이터로 변경하는 쿼리문을 작성하라

 



2. 아래의 테이블을 해당 결과 데이터로 변경하는 쿼리문을 작성하라

 

 

 

 


WRITTEN BY
빨강꼬마

,