http://loveu.oranc.co.kr/bbs/zboard.php?id=skill&page=2&sn1=&divpage=1&category=2&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=90


oracle


오라클 버젼확인 : select * from product_component_version;

산술 함수

ABS(n) : 절대값 |n|
sin() cos() tan() sinH() cosH() tanH() : radian값을 이용
ex> 30' 일 경우 sin(30* (3.14.../180));
exp(n) : 지수값 e를 밑으로 하는 e의 n승 값;
LN(n):자연 log값 밑수 e 지수 n
SQRT(n): 루트n
power(m,n): m의 n승
MOD(m.n) : m을  n 으로 나눈 나머지
floor(n): n보다 작은 정수값들중에서 최대값
ceil(n): n보다 큰 정수값들중에서 최소값
ex> floor(3.5)   -->  3   ,    ceil (3.5)  -->  4
      floor(-3.2) --> -4  ,     ceil (-3.5) --> -3
greatest(m,n): 두 수중에서 큰것
least(m,n);두 수중에서 작은 것
TO_NUMBER('숫자형 문자열'):문자를 숫자로 변환
round(m,n):반올림
trunc(m,n):절삭한다 즉 반올림을 허용하지 않는다.
 
ex>  Round(2.4678, 2)   -->  2.47   ,    trunc(2.4687, 2)    -->  2.46
    Round(3654.26, -2) --> 3700  ,   trunc (3654.26, -2 ) --> 3600
NVL(col명,값): col의 값이 null를 가질때 값을 가진다.
ex> 100+NULL은 NULL이 되기 때문에 이러한 문제점을 해결할 때 사용한다.
select ename,sal,comm,sal+nvl(comm,0) from emp;
          -->sal값과 comm값을 더하는데 comm값이 null값이면 0값을 취한다...

문자열 함수

lower():소문자로 변환시켜주는 함수
upper():대문자로 변환시켜주는 함수
Initcap():단어의 첫자만 대문자로 나머지는 소문자로
 
Initcap('i LOVE you') ---->  I Love You
 

length():문자열의 길이
substr(문자열,위치,갯수): 해당위치에서 갯수만큼의 문자열을 추출한다.
 
substr ('KOREA', 3, 2) ---->  'RE'
-- 3번째인 R부터 2글자 출력
instr(문자열,찾을 문자열[,위치,찾을위치])
:문자열에서 이 문자를 찾아라. return값은 찾은 위치
 

Instr("abcdabkdoerabjdlfjdg","ab") -----> 1
-- 1번째에서 시작해서 처음  ab가 나타나는 1출력
Instr("abcdabkdoerabjdlfjdg","ab",4,2) ---->  12
-- 4번째부터 시작해서 두번째 나타나는  ab 출력
 

user:현재 접속된 사용자를 보여준다.
decode(col명,비교값,취할값,비교값,취할값,....기본값)
:col값이 비교값이면 취할값으로 대체.

decode(deptno,10,'총무부',20,'영업부',30,'전산부','관리부'):나머지는 관리부
-- deptno가 10이면 총무부 , 20이면 영업부, 30이면 전산부 나머지 는 관리부 출력

trim : 좌우 공백 제거

날짜 함수

TO_CHAR(날짜,'포맷'): 날짜를 문자열로 바꾼다.
TO_DATE(문자열,'포맷'):문자열을 날짜로 ex> TO_DATE('97-10-14',' -----')
ADD_MONTHS(날짜,n):현재 날짜에 n개월수를 더한다.
MONTHS_BETWEEN(날짜1,날짜2):두 날짜의 개월수의 차를 구한다.
LAST_DAY(날짜):그 달의 마지막 날짜를 구한다.
NEXT_DAY(날짜,'요일'):날짜로 부터 다음에 나오는 요일은 며칠인가
next_day(sysdate,'금요일')
날짜 + n : 날짜에다 n 일을 더한다.
포맷:
yy : 년도를 2자리로
yyyy : 년도를 4자리로
year : 영어 철자로 표시
mm :월을 표시(01-12)
mon :월을 표시(DEC....):약자로 나온다.
month :월을 표시(1월,2월,....혹은 ,DECEMBER)
d :일을 표시(주에 대한 일)
dd :일을 표시 (월에 대한 일)
ddd :일을 표시 (년에 대한 일)
Q : 분기를 구한다.
DAY :요일 (월요일)
DY  :요일(월)
HH & HH12 :시간을 12시간제로
HH24 :24시간제로
MI:분
SS:초
AM & PM & A.M & P.M:12시간제 일때 오전 오후를 표시
접미사로 사용하는 포맷
TH:서수로 표시 ex> 4 -> DD ->4
                             4-> DDTH -> 4TH
SP:철자로 표시 ex> 4 ->DDSP -> FOUR
SPTH & THSP  ex> 4 -> DDSPTH -> FOURTH
근무한 년월 수 ex> column "근무년수" Format a 14;

그룹 함수

NULL값은 계산되지 않는다.
여러개의 데이타에 대한 결과 이므로 그룹함수라 한다
단일 필드와 함께 사용할 수 없다.
만약 단일 필드와 사용되면 group by절에 반드시 나와야 한다.
sum() : 합
avg() : 평균
count() : 갯수  count(*): 리턴되는 레코드의 수를 계산
ex> select deptno,sum(sapay) from sawon;  에러
-->단위 필드이므로 따라서 마지막에 group by deptno;라고 지정해주면 사용가능
max() : 최대값
min() : 최소값
stddev : 표준편차
variance : 분산  

:: 예제 ::

오늘 날짜에 2틀씩 뺀것
select sysdate+2, sysdate-2 from dual;

오늘날짜에 3시간을 더한것과 20분을 더한것
select sysdate+3/24, sysdate+20/1440 from dual;

오늘날짜에 며칠을 뺀것
alter session
set nls_date_format = 'yyyy-mm-dd;
select sysdate-to_date('2005-03-02') from dual;
위에서 세션을 변경해준것은 2005-03-02가 문자로 인식되기 때문에 바꾸어 준것이과 기존에 되어 있던 날짜 입력형태가 시간까지 들어가 있기 때문에 그런것이다.

오늘날짜에 3개월을 더하고 3개월을 뺀것
select add_months(sysdate,3), add_months(sysdate,-3) from dual;

오늘을 기준으로 가장 가까운 토요일, 가장가까운 일요일
select next_day(sysdate,'토'),next_day(sysdate,'월'),next_day(sysdate,'금') from dual;
여기에서 next_day의 형식은 날짜 다음 요일이라는 것이 오라클 사에서 지정이 되어 있기 때문에 '토'가 문자라 인싟하지 않는 것이다

오늘부터 1월1일까지 몇개월 지났을까
select months_between(sysdate,'2005-01-01) from personel;

[형변환]

To_Number : 숫자로 바꾸어라
T0_date : 날짜로 바꾸어라

세션변경---------------------
alter session
set nls_date_format = 'yyyy-mm-dd day hh24:mi:ss BC';
변경후 위에 것을 다시 실행해 보세요

날짜에 숫자를 연산했을 경우에는 날짜가 나옴
  data + number  = date
  data - number = date
  date - date = Number of days
  date + number/24 = Date
Posted by [czar]
,