Oracle 내장 함수

부트캠프(END)/Oracle|2022. 6. 21. 15:45

<문자 함수>

LENGTH : 문자의 길이를 반환한다.

SELECT LENGTH('ABC'), LENGTH('코딩공부블로그') --각각 3, 7 출력
FROM DUAL; --테이블 없이 계산 출력/함수 확인용 연습테이블(오라클)

UPPER : 대문자로 변환 ↔ LOWER : 소문자로 변환

INITCAP : 맨 앞글자만 대문자로 변환

SELECT UPPER('abC'), --ABC
	LOWER('ABc'), --abc
	INITCAP('something good can work') --Something Good Can Work
FROM DUAL;

*REPLACE(문자열, 바꿀 문자, 바뀔 문자) :문자열의 특정 문자를 다른 문자로 변경 

*SUBSTR(문자열, 시작위치, 자를 문자 수) : 문자열을 원하는 위치에서 추출

시작 위치를 음수로 주면 뒤에서부터 위치를 지정하고 오른쪽 방향으로 추출한다.

SELECT REPLACE('something good', 'o', 'O'), --sOmething gOOd
	SUBSTR('something good can work', 11,4) --good
FROM DUAL;

*INSTR(문자열, 찾는 문자, 시작 위치, 몇 번째) : 다수의 특정 문자 중 원하는 순서의 문자 위치를 반환

--abcabcabc의 1번째 글자부터 3번째 a의 위치를 찾는다
SELECT INSTR('abcabcabc','a',1,3), --7
	INSTR('abcabcabc','d',1,3), --찾는 문자가 없으면 0
	INSTR('abcabcabc','a',1,4) --0
FROM DUAL;

LTRIM, RTRIM, TRIM : 문자열에서 원하는 부분을 왼/오른쪽/전체에서 제거

SELECT LTRIM('aaabbbcccaaa','a'), --bbbcccaaa
	RTRIM('aaabbbcccaaa','a'), --aaabbbccc
	TRIM('a' FROM 'aaabbbcccaaa') --bbbccc *FROM 꼭 붙여야 한다.
FROM DUAL;

LPAD, *RPAD : 문자열의 왼/오른쪽에 정해진 칸수만큼 채우는 문자를 추가

SELECT LPAD('Kim',8,'#'), --#####Kim
	RPAD('Kim',8,'#'), --Kim#####
	LPAD('Kim',2,'#'), --Ki *문자열이 잘릴 수도 있다.
	RPAD(SUBSTR('Kimdoodoo',1,3),LENGTH('kimdoodoo'),'*') --Kim******
FROM DUAL;

CONCAT : 문자열 결합

SELECT CONCAT('김두두',' 잔다~') //김두두 잔다~
FROM DUAL;

 

 

<숫자 함수>

MOD : 나머지(%)

*CEIL : 정수로 올림

*ROUND : 반올림 (소수점자리 지정하지 않으면 1의 자리)

TRUNC : 버림 (소수점 자리 지정하지 않으면 1의 자리)

SELECT MOD(10,3), --1
	CEIL(0.54), --1
	CEIL(14), --14
	ROUND(0.135,2), --0.14
	TRUNC(125.23,1) --125.2
FROM DUAL;

 

 

<날짜 함수>

*SYSDATE : 시스템의 날짜&시간 읽기(정수형처럼 계산이 된다)

SELECT SYSDATE-1, --22/06/20
	SYSDATE, --22/06/21
	SYSDATE+1 --22/06/22
FROM DUAL;

*MONTHS_BETWEEN : 기간에 해당하는 개월 수

SELECT MONTHS_BETWEEN('22/06/21','22/02/21'), --4
	MONTHS_BETWEEN('22/06/21','22/02/01') --4.6451...
FROM DUAL;

 

NEXT_DAY(날짜, 요일) : 오늘을 지나 다음에 오는 지정요일이 며칠인지 반환

LAST_DAY(날짜) : 지정날짜 달의 마지막 날짜를 반환

SELECT NEXT_DAY('22/06/21','화'), --22/06/28
	LAST_DAY('22/06/21') --22/06-30
FROM DUAL;

*ADDS_MONTH(날짜, 개월 수) : 등록된 날짜에서 개월 수가 추가된 날짜를 반환

SELECT ADD_MONTHS(SYSDATE, 3) --22/09/21
FROM DUAL;

 

 

<변환 함수>

***TO_CHAR : 숫자나 날짜의 형식을 변경해서 문자열로 반환

SELECT TO_CHAR(SYSDATE,'yyyy-mm-dd hh:mm:ss'), --2022-06-21 15:09:33
	TO_CHAR(SYSDATE,'yyyy"년도"mm"월"dd"일"') --2022년도 06월 21일
FROM DUAL;
SELECT TO_CHAR(13000000,'L99,999,999') --₩13,000,000
FROM DUAL;

 

 

<기타 함수>

*****NVL : Null 값을 다른 값으로 대체

DECODE : 다중 조건문을 구현한다.

--deptno가 10이면 개발부, 20이면 영업부, 30이면 총무부라고 나타내는 컬럼을 나타낸다.
SELECE ename, 
	DECODE(deptno, 
		10, '개발부',
		20, '영업부',
		30, '총무부') dname
FROM emp;

CASE : MySQL과 동일함. 여기 참고

 

JDBC로 오라클과 자바 연결하기

dao.Emp.java

package doodoo.dao;

import java.util.*;
// DB의 컬럼과 데이터형을 일치시킨다.

public class Emp {
	private int empno;
	private String ename;
	private String job;
	private int mgr;
	private Date hiredate; 
	private int sal;
	private int comm;
	private int deptno;
	
	public int getEmpno() {
		return empno;
	}
	public void setEmpno(int empno) {
		this.empno = empno;
	}
	public String getEname() {
		return ename;
	}
	public void setEname(String ename) {
		this.ename = ename;
	}
	public String getJob() {
		return job;
	}
	public void setJob(String job) {
		this.job = job;
	}
	public int getMgr() {
		return mgr;
	}
	public void setMgr(int mgr) {
		this.mgr = mgr;
	}
	public Date getHiredate() {
		return hiredate;
	}
	public void setHiredate(Date hiredate) {
		this.hiredate = hiredate;
	}
	public int getSal() {
		return sal;
	}
	public void setSal(int sal) {
		this.sal = sal;
	}
	public int getComm() {
		return comm;
	}
	public void setComm(int comm) {
		this.comm = comm;
	}
	public int getDeptno() {
		return deptno;
	}
	public void setDeptno(int deptno) {
		this.deptno = deptno;
	}
}

 

dao.EmpDAO.java

package doodoo.dao;
import java.util.*; //ArrayList 
import java.sql.*; //오라클 연결

public class EmpDAO {
  //오라클 연결 객체
  private Connection conn;
  //SQL문장 전송
  private PreparedStatement ps;
  //연결할 오라클 서버 주소(URL)
  private final String URL = "jdbc:oracle:thin:@localhost:1521:XE";

  //드라이버 등록
  public EmpDAO() {
    try {
      Class.forName("oracle.jdbc.driver.OracleDriver");
    } catch (Exception ex) {}
  }
  //오라클 연결
  public void getConnection() {
    try {
      Connection conn = DriverManager.getConnection(URL, "hr", "happy");
    } catch (Exception ex) {}
  }
  //오라클 닫기
  public void disConnection() {
    try {
      if (ps != null) ps.close();
      if (conn != null) conn.close();
    } catch (Exception ex) {}
  }

  //기능1. 목록 출력
  //클래스는 한 명, 한 개에 대한 정보를 담고 있다. -> 모아서 관리하는게 List
  public ArrayList <Emp> empListData() {
    ArrayList <Emp> list = new ArrayList <Emp> ();
    try {
      getConnection(); //연결
      String sql = "SELECT empno, ename, job, hiredate, sal, NVL(comm,0)" +
        "FROM emp"; //SQL문장 만들기
      ps = conn.prepareStatement(sql); //오라클에 전송
      ResultSet rs = ps.executeQuery(); //결과값 받기
      while(rs.next()) { //처음부터 마지막까지
    	  Emp emp = new Emp();
    	  emp.setEmpno(rs.getInt(1));
    	  emp.setEname(rs.getString(2));
    	  emp.setJob(rs.getString(3));
    	  emp.setHiredate(rs.getDate(4));
    	  emp.setSal(rs.getInt(5));
    	  emp.setComm(rs.getInt(6));
    	  
    	  list.add(emp);
      }
      rs.close();
    } catch (Exception ex) {
      ex.printStackTrace();
    } finally {
      disConnection();
    }
    return list;
  }
}

user.MainClass.java

package doodoo.user;
import doodoo.dao.*;
import java.util.*;

public class MainClass {

	public static void main(String[] args) {
		EmpDAO dao = new EmpDAO();
		ArrayList<Emp> list = dao.empListData();
		
		for(Emp e:list) {
			System.out.println(e.getEmpno() + " "
					+ e.getEname() + " "
					+ e.getJob() + " "
					+ e.getHiredate().toString()+ " "
					+ e.getSal() + " "
					+ e.getComm());
		}
	}

}

'부트캠프(END) > Oracle' 카테고리의 다른 글

Oracle JOIN, ANSI JOIN  (0) 2022.06.22
NVL, LIKE, ORDER BY + JDBC예제  (0) 2022.06.20
데이터베이스(Database)  (0) 2022.06.17

댓글()