데이터베이스

[오라클]유용한 명령어 - 기본

늘근이 2014. 5. 12. 09:46

LOWER,UPPER

대문자 소문자 바꿔주는 예제.

테이블안에 대문자로 들어있는데, 값을 뽑아올때는 그런거 상관없이 뽑아온다면 차라리 데이터를 다 소문자로 바꿔서 검색을 할수 있다.

SELECT pname, LOWER(pname) FROM employee;

SELECT pname, UPPER(pname) FROM employee;


조금더 응용을 해보자면

SELECT pname, depno FROM emp WHERE LOWER(pname) = 'john' ;


CONCAT

글자까지 합쳐서 가져오기

SELECT pname||'의 연봉은'||salary||'입니다' AS info FROM employee;

별칭을 이용해서 응용을 해본다. ||은 연결함수고, ||대신 concat함수를 이용해도 된다.

SELECT concat(concat(concat(pname,'의 월급여는'),salary),'입니다') AS info FROM employee;


SUBSTR

Substring으로 글자 잘라오기. 밑의 결과는 love를 잘라온다.

사실, doong은 쓰레기값하나가 들어가 있는 dummy테이블밖에 없다. 왜냐면 FROM절은 생략할수없어서 무슨 테이블을 쓰긴써야하기때문에 그냥 빈테이블을 쓰는거다

 SELECT substr('i love you',3,4) FROM ddong

l자부터 (세번째 알파벳) 4개를 가져오란것이다.

관습적으로 똥이 아니라 dual로 쓴다고 한다.

마찬가지로 sysdate등도, 테이블값 하나하나마다 다 가져오게되는 대참사가 일어날수 있기 때문에 이 더미 테이블을 이용해서 현재시각을 알아낼수 있다.


INSTR

you라는 문자를 찾는중 두번째 놈의 위치를 찾아준다

 SELECT instr('i love you you','you',1,2) FROM ddong

출력은 12가 뜬다


-1은 오른쪽부터 찾게 된다.

SELECT instr('i love you you','you',1,2)

           ,instr('i love you you','you',-1)

FROM ddong 


만약

'you'대신 'me'를 준다면 0이 뜰것이다


종합예제로, 이메일 앞의 아이디를 한번 잘라와보자

select substr(email,1,instr(email,'@')-1) from userinfo 



RTRIM

알트림? 은 오른쪽의 공백을 끊어내는 놈이다. 



 SELECT RTRIM('i love you          ') FROM ddong;


오른쪽의 공백이 막 들어가 있을때 저 you 후에 오는 공백을 없앨수있다.


공백이 아닌 문자를 제거하는 놈은 TRIM이다. 대신 인자로 지정된 문자를 넣어줘야 그 문자가 나오기 전까지 지운다. 사실 공백제거말고는 쓸일이 없기때문에, 그냥 둘의 결과가 같을것이다.


LENGTH LENGTHB

LENGTH 는 문자를 세주고, LENGTHB는 바이트기준으로 글자를 세기때문에 영어나 숫자는 그놈이 그놈이지만 한글은 1바이트가 아니기 때문에 바이트의 크기를 돌려준다.


ROUND TRUNK

 SELECT round(3.141590202020202) FROM ddong;

이렇게 하면 소수이하 첫번째 자리임! 



 SELECT round(3.141590202020202, 5) FROM ddong;

이렇게 하면 다섯자리까지 나오라는 것이다. 여섯자리에서 반올림이 되서 다섯자리에서 고고싱할것이다. 3.14159가 튀어나옴



 SELECT round(3.141590202020202, -1) FROM ddong;

이렇게 하면 십의자리까지 나온다. (일의 자리 반올림)


TRUNK는 버림이다!!


MOD

modulus의 약자로써, 나머지를 구해주는 거시기다.


 SELECT mod(10,3) FROM ddong;


몫을 구할때는 그냥 10/3을 라운드하거나 해서 쓰면된다. MOD는 %기능인것이다.


SYSDATE

sysdate + 1, sysdate - 1

처럼 어제의 날짜나 내일의 날짜를 구할수 있다


근데 월을 더하고 싶다 뭐 이런것도 있다. 이런건 함수를 이용하면 편하다


 SELECT add_months(sysdate, 2) FROM ddong;


근속일수를 구하고 싶으면 sysdate - hiredate 로 구할수있다. 1이 하루기 때문에 근속일수다. 만약 월수를 계산하고 싶으면


 SELECT months_between(sysdate, hiredate) FROM employee;


이건 요일임! (1이 먼데이인듯하다)

 SELECT next_day(sysdate, 1) from ddong;


last_day는 그 해당하는 월의 마지막 날짜가 튀어나온다




이렇게 DB가 제공하는 함수를 잘 이용한다면, ID가 이메일형식을 가지고 있어도 이 데이터를 가지고 가공을 쉽게 할수 있을것이다.