본문 바로가기

   
Programming/ORACLE

3일차!

반응형

--오라클의 내장함수(SQL함수)

--  -데이타에 대한 간단한계산

--  -날짜나 숫자의 형식을 반환

--  -개별 데이터의 수정

--  -행그룹에 대한 출력 결과 조작

--

--내장함수

--  - 단일 함수 : 행하나 하나마다 연산을 수행해서 결과를 반환한다.

--      문자함수 : 텍스트 데이타에 대한 단순한 연산을 지원한다. /소문자변환, 길이, 특정문자의 위치, 잘라내기, 바꾸기

--      문자값에 대한 간단한 처리를 지원하는 함수

--      숫자함수 : 숫자데이타에 대한 단순한 연산을 지원한다. 반올림, 버리기, 나머지....

--        ROUND(컬럼/표현식,n)

--          값을 n번째 자리로 반올림한다.

--          (n 음수면 소숫점 왼쪽의 수가 반올림 된다.)

--        trunc(컬럼/표현식,n)

--          값을 n번째 자리까지 남기고 버린다.

--          (h 지정하지 않으면 기본값은 0)

--        mod(컬럼/표현식,n)

--          값을 n으로 나눈 나머지 값을 반환한다.

--        floor(컬럼/표현식)

--          값과 가장 근접한 작은정수

--        ceil(컬럼/표현식)

--          값과 가장 근접한 정수

--      날짜함수 : 날짜데이타에 대한 단순한 연산을 지원한다, 현재시간 알아내기, 날짜간격

--        sysdate - 데이타베이스 서버의 현재 날짜 시간을 반환

--                - 새글 작성시, 예약할 , 주문할때, 가입할때

--        months_between(날자1, 날자2)

--          두날짜간의 개월수

--        add_months(날짜,n)

--          날자에 n개월만큼 더한 날짜를 반환한다.

--        next_day(날짜,'요일')

--          날짜보다 이후 날짜이며 지정된 요일에 해당하는 날짜

--        last_day(날짜)

--        지정된 날짜가 포함된 날의 마지막 날짜

--       날짜관련 연산

--          date + 숫자 => 숫자만큼의 이후 날짜

--          date + 숫자 => 숫자만큼의 이전 날짜

--          date - date => 날짜사이의

--      변환함수 : '문자 <-> 숫자 ',' 문자 <-> 날짜 변환하는 함수

--      일반함수 : 기타 다양한 기능을 지원하는 함수

--  - 복수 함수 : 그룹을 조작해서 그룹당 하나의 결과를 반환한다.(그룹함수)

 

--문자함수

SELECT LAST_NAME, UPPER(LAST_NAME) "대문자", LOWER(LAST_NAME) "소문자", CONCAT(FIRST_NAME, LAST_NAME) "이름합체",

LENGTH(LAST_NAME) "길이", LENGTHB(LAST_NAME) "바이트 길이", SUBSTR(LAST_NAME, 1, 2) "자르자", INSTR(LAST_NAME, 'L') "특정문자가몇번째?",

TRIM(LAST_NAME) "공백제거",  REPLACE(LAST_NAME, 'A', 'Z') "바꾸자", LPAD(LAST_NAME, 10, '●') "왼쪽에 채우자",

RPAD(LAST_NAME, 10, '■') "오른쪽 채우자"

FROM EMPLOYEES

WHERE JOB_ID = 'IT_PROG';

 

--국번만 뽑기

SELECT TEL, SUBSTR(TEL,1, INSTR(TEL,')')-1) "국번"

FROM EMP2;

 

--주민번호 별표 

SELECT REPLACE(SUBSTR(NAME,1,1), '', '*') || SUBSTR(NAME,2,LENGTH(NAME))

FROM STUDENT;

 

--주민번호 별표

SELECT RPAD(SUBSTR(JUMIN,1,6)|| '-', 12, '*')

FROM STUDENT;

 

SELECT ROUND(45.925, 2), TRUNC(45.925, -1)

FROM DUAL;

 

SELECT ROUND(WEIGHT, 2)

FROM STUDENT;

 

--emp2 테이블에서 사원들의 월급을 출력하세요

SELECT EMPNO, (PAY/12) "월급"

FROM EMP2;

--(사원번호, 사원이름, 직위, 연봉, 월급을표시)

SELECT EMPNO, NAME, POSITION, PAY "연봉", (PAY/12) "월급"

FROM EMP2;

--(월급은 1000 단위까지만 표시하시고 나머지는 버리세요.)

 

SELECT EMPNO, NAME, POSITION, PAY "연봉", TRUNC((PAY/12), -3) "월급"

FROM EMP2;

 

--number   - 숫자(중수, 실수)

--char  -고정길이 문자열

--varchar, varchar2 - 가변길이 문자열

--date  - 날짜정도

--clob  - 대용량 텍스트 데이타

--blob  - 대용량 바이너리 데이타

 

SELECT ROUND(SYSDATE - to_date('1993-10-19','YYYY-MM-DD')) "얼마나 살았나 "

FROM DUAL;

 

SELECT NAME, BIRTHDAY, ROUND(MONTHS_BETWEEN(SYSDATE, BIRTHDAY)) || '개월' "MONTHS"

FROM EMP2;

 

SELECT LAST_DAY(SYSDATE)--이번달의 마지막

FROM DUAL;

 

SELECT NEXT_DAY(SYSDATE, '')

FROM DUAL;

 

--변환함수

--  to_char(날짜, '포맷형식')

--  날짜 -> 문자

--      : 날짜정보를 적절한 형식의 텍스트로 변환

--  to_char(숫자, '포맷형식')

--  숫자->문자

--      "숫자를3자리마다'.' 넣어서 텍스트로 변환

--  날짜포맷 형식

--    YYYY  - 네자리 연도

--    MM    - 두자리 값의

--    DD    - 그달의

--   

--    AM, PM - 오전/오후

--    HH, HH12, HH24 - 시간

--    M -

--    SS -

--  숫자포맷 형식

--  9 - 숫자를표시한다.

--  0 - 0을강제로 표시한다.

--  $ - 달러표기를 표시한다.

--  . - 소수점을 표시한다.

--  , - 천단위 구분점을 표시한다.

 

--to_date(문자, '패턴')

--  문자가 지정된 패턴으로 날짜표기라면 날짜로 변환한다.

--to_number(문자 '패턴')

--  문자가 지정된 패턴으로 숫자 표기라면 숫자로 변환한다.

--날짜가 텍스트형태의 데이터 타입으로 변한것

SELECT TO_DATE('2014-04-25', 'YYYY-MM-DD')

FROM DUAL;

 

SELECT SYSDATE, TO_CHAR(SYSDATE, 'HH-MI-SS') "월일"

FROM DUAL;

 

SELECT NAME, TO_CHAR(BIRTHDAY, 'YY') || '년도생'

FROM EMP2;

 

SELECT NAME, TO_CHAR(BIRTHDAY, 'MM')

FROM EMP2;

 

--숫자가 콤마를 포함한 문자열로 변환 된것

SELECT TO_CHAR(1000000, '0,000,000')

FROM DUAL;

 

SELECT NAME, PAY, TO_CHAR(PAY, '00,000,000,000')

FROM EMP2;

 

 

--오라클의 묵시적 형변환

--  - 오라클이 알아서 값을 다른 형식을 변환하는것(, 값이 변환하기에 적절한 값이라면

SELECT *

FROM STUDENT

WHERE GRADE = '4';

--오라클의 명시적 형변환

-- 지정한 형식으로 사용자가 변환 하는것

 

-- 내가 살아온 일수를 계산하고싶어

-- (오늘 - 생일) -> (날짜) - (날짜)

SELECT ROUND(SYSDATE - TO_DATE('1984-10-21', 'YYYY-MM-DD'))

FROM DUAL;

 

--TO_NUMBER 문자 -> 숫자

SELECT TO_NUMBER('4') * TO_NUMBER('2,123', '9,999') AS 곱셈

FROM DUAL;

 

--기타함수

--NVL(NULL값이 존재한다면 지정한 값으로 대체)

--NULL 값이 계산에 참여하지 않게 하기위해

SELECT ENAME, NVL(COMM,0)

FROM EMP;

 

SELECT ENAME, SAL, (SAL*12) + NVL(COMM,0) AS PAY

FROM EMP;

 

SELECT ENAME, SAL, COMM, SAL*12 + NVL2(COMM,COMM + 200, 100) AS PAY

FROM EMP;

 

--DECODE

--IF문을 흉내낼 있다.

SELECT NAME, EMP_TYPE,

DECODE(

EMP_TYPE, '정규직', 200,

'계약직', 100,

'수습직', 70,

'인턴직', 50

) "뽀나리"

FROM EMP2;

반응형