예제#2

강의노트/sql 2013. 6. 12. 09:50

SELECT 'Oracle mania', 

UPPER('Oracle mania'),         //대문자로

LOWER('Oracle mania'),         //소문자로

INITCAP('Oracle mania')         //첫글자만 대문자

FROM dual;        //듀얼은 시스템에 내장되어있는 테이블이름


SELECT ename, LOWER(ename), job, INITCAP(job) FROM employee;


//출력은 Initcap, 검색은 소문자로

SELECT eno, INITCAP(ename) as "NAME", dno

FROM employee

WHERE LOWER(ename)='scott';


영문과 한글의 길이구하기

SELECT LENGTH('Oracle'), LENGTH('오라클') FROM dual;

>>>> Oracle 6, 오라클 3


영문과 한글의 바이트수 구하기    //UTF-8에서 한글은 한글자당 3바이트

SELECT LENGTHB('Oracle'), LENGTHB('오라클') FROM dual;

>>>> Oracle 6바이트, 오라클 9바이트


//문자 결합하기

SELECT CONCAT('Oracle', 'Database') FROM dual;


//문자열 일부만 추출, 첫번째문자열부터 2개

SELECT SUBSTR('Oracle', 1, 2) FROM dual;


//이름이 N으로 끝나는 사원    //-1은 끝에서부터 -1,-2,-3...

SELECT * FROM employee WHERE SUBSTR(ename, -1, 1) = 'N';


//87년도에 입사한 사원표기

SELECT * FROM employee WHERE SUBSTR(hiredate, 1, 2) = '87';


//INSTR함수로 위치찾기    //INSTR 특정문자의 위치값    //INSTRB 특정문자의 바이트위치값

SELECT INSTR('오라클', '라'), INSTRB('오라클', '클') FROM dual;

>>>>2                    >>>>7


//사원검색            //R이 있는걸 먼저추출하고, 3번째시작해서 1개문자를 찾음

SELECT * FROM employee WHERE INSTR(ename, 'R', 3, 1) = 3;

 R R R R R           //

1,3 => 3        첫번째에서 시작해서 3개째에 등장하는 R의 위치는 3

3,2 => 4        세번째에서 시작해서 2개째에 등장하는 R의 위치는 4

2,3 => 4        두번째에서 시작해서 3개째에 등장하는 R의 위치는 4


//왼쪽자리를 특정기호로 채우기    //10칸을 모두 채우게끔 왼쪽을 '*'로 채움

SELECT LPAD(salary, 10, '*') FROM employee;    //왼쪽(******1580)

SELECT RPAD(salary, 10, '*') FROM employee;    //오른쪽 (1580******)


//특정문자제거        //맨앞문자와 맨뒤문자만 TRIM

SELECT TRIM('O' FROM 'Oracle Database') FROM dual;

>>>>racle Database


//한쪽공백제거

SELECT LTRIM(' Oracle '), RTRIM(' Oracle ') FROM dual;

//앞뒤공백제거

SELECT TRIM(' Oracle ') FROM dual;


//반올림

SELECT ROUND(99), ROUND(98.7654), ROUND(98.7654, 1), ROUND(98.7654, 2), ROUND(98.7654, -1) FROM dual

>>99            >>99                    >>98.8                >>98.77                    >>100

소수점 첫째자리 = 0

소수점 둘째자리 = 1

소수점 셋째자리 = 2

일의자리 = -1


//버림

SELECT TRUNC(98.7654), TRUNC(98.7654, 2), TRUNC(98.7654, -1) FROM dual;


//나머지        //

SELECT MOD(31,2) FROM dual;


//날짜계산(시스템데이트)

SELECT SYSDATE-1 AS "어제", SYSDATE AS "오늘", SYSDATE+1 AS "내일" FROM dual;

//근무일수계산

SELECT ROUND(SYSDATE-hiredate) as 근무일수, hiredate FROM employee;

//입사일에서 월을 기준으로 잘라냄

SELECT hiredate, TRUNC(HIREDATE, 'MONTH') FROM employee;

//각 사원들이 근무한 개월수 구하기

SELECT ename, sysdate, hiredate, TRUNC(MONTHS_BETWEEN(SYSDATE, HIREDATE)) FROM employee;

//입사한지 6개월 지난날

SELECT ename, hiredate, ADD_MONTHS(HIREDATE, 6) FROM employee;

//오늘날짜, 토요일인 날짜 출력 //오늘을 기준으로 최초로 돌아오는 토요일

SELECT SYSDATE, NEXT_DAY(SYSDATE, '토요일') FROM dual;

//입사한 달의 마지막날 구하기

SELECT ename, hiredate, LAST_DAY(HIREDATE) FROM employee;


//형식바꾸기    //날짜함수사용

SELECT ename, hiredate, TO_CHAR(hiredate, 'YY-MM'), TO_CHAR(hiredate, 'YYYY/MM/DD DAY')

FROM employee;

// 급여앞에 통화기호 붙이기    //1,000,000,000,000,000,000 형태

SELECT ename, TO_CHAR(salary, 'L999,999') FROM employee;

//날짜형으로 변환

SELECT ename, hiredate FROM employee WHERE hiredate=TO_DATE(19810220, 'YYYYMMDD');

//숫자형태로 변환후 빼기    //(숫자, 숫자의범위형태)

SELECT TO_NUMBER('10,000,000', '999,999,999')-TO_NUMBER('50,000','999,999') FROM dual;



'강의노트 > sql' 카테고리의 다른 글

예제#4  (0) 2013.06.14
연습문제#2  (0) 2013.06.13
예제#3  (0) 2013.06.13
연습문제#1  (0) 2013.06.10
인사관리(hr, hr) 예제#1  (0) 2013.06.07