문자 함수
-- 문자 함수(length, lengthb)
select length('ABC'), length('김')
from DUAL; -- 컬럼명 없을 때 사용, 연습용(계산 출력,함수 확인)
select length('ABC'), lengthb('김') --한글은 1개당 3바이트
from DUAL;
-- UPPER, LOWER, INITCAP
select upper('abc'), lower('ABC'), initcap('ABC')
from DUAL;
-- UPPER
select ename, job
from emp
where ename=UPPER('king');
-- UPPER, LOWER, INITCAP
select ename, upper(ename) "대문자", lower(ename) "소문자", initcap(ename) "이니셜" -- ALIAS(별칭)
from emp;
-- SUBSTR == substring()
select substr('ABCDEFG', 3, 1) -- 3번째에서 1글자 자르기
from dual;
-- YY/MM/DD
select ename, substr(hiredate, 1, 2), substr(hiredate, 4, 2), substr(hiredate, 7, 2)
from emp;
select ename, substr(hiredate, -1, 2), substr(hiredate, -4, 2), substr(hiredate, -7, 2)
from emp;
-- 81년에 입사한 사원의 이름, 입사일
select ename, hiredate
from emp
where substr(hiredate, 1, 2)=81;
-- INSTR == indexOf, lastIndexOf
select ename, instr(ename, 'A', 1, 1) -- 맨 앞에 있는 'A' 찾기
from emp;
-- 이름 3번째 자리가 'O'인 사원의 이름, 직위
select ename, job
from emp
where ename like '__O';
select ename, job
from emp
where instr(ename, 'O', 1, 1)=3
-- replace
select replace('hello java', 'java', 'oracle')
from dual;
-- trim (자바는 공백만 제거하지만, 오라클은 문자도 제거 가능)
-- ltrim : 왼쪽 제거
select ltrim('AAABBBCCCAAA', 'A')
from dual;
-- rtrim : 오른쪽 제거
select rtrim('AAABBBCCCAAA', 'A')
from dual;
-- trim : 양방향 제거
select trim('A' from 'AAABBBCCCAAA')
from dual;
-- lpad
select lpad('King', 8, '*'), lpad('King', 3, '#') -- 부족하면 채우고, 넘치면 자른다
from dual;
숫자 함수
-- mod
-- 사번이 짝수인 사원의 이름, 직위, 사번
select ename, job, empno
from emp
where mod(empno, 2)=0;
-- ceil : 올림 함수
select count(*) from books;
-- 한 페이지당 15개 출력 : 총 페이지
select ceil(count(*)/15.0) from books;
-- round/trunc
select round(12345.789, 2), trunc(12345.789, 2)
from dual;
날짜 함수
-- 날짜 함수
-- **sysdate
select sysdate-1 "어제", sysdate "오늘", sysdate+1 "내일"
from dual;
-- **months_betweeen
-- 근무개월 수
select ename, round(months_between(sysdate, hiredate)/12) -- 개월수/12 == 연도
from emp;
-- next_day, last_day (거의 안 씀..)
select next_day('22/06/21', '화'), next_day('22/06/21', '수')
from dual;
-- 그 달의 마지막 날
select last_day('22/06/21'), last_day('22/06/21')
from dual;
-- **adds_month : 등록된 날의 날짜
--오늘부터 4개월 후 날짜
select add_months(sysdate, 4)
from dual;
변환 함수
-- 요일 문자열로 변환
select to_char(sysdate, 'day')
from dual;
select ename, hiredate, to_char(hiredate, 'day')
from emp;
-- 화요일에 입사한 사원의 이름, 입사일, 급여
select ename, hiredate, to_Char(sal, '$99,999') "월급"
from emp
where to_char(hiredate, 'day') = '화요일';
기타 함수
-- **NVL(null 값 대체)
select ename, sal, comm, sal + NVL(comm, 0)
from emp;
-- decode(다중 조건문)
select ename, decode(deptno, 10, '개발부', 20, '영업부', 30, '총무부') dname
from emp;
select ename, deptno, case when deptno=10 then '개발부' when deptno=20 then '영업부' when deptno=30 then '총무부' end dname
from emp;
-- 숫자 -> 문자 변환
select chr(65), chr(66), chr(67)
from dual;
오라클 자바 연동
package com.sist.dao;
import java.util.*;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
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 dept;
}
package com.sist.dao;
import java.util.*;
import java.sql.*;
public class EmpDAO {
// 오라클 연결 객체
private Connection conn;
// SQL 문장 전송
private PreparedStatement ps;
// 오라클 서버 URL에 연결
private final String URL = "jdbc:oracle:thin@localhost:1521:XE";
// 1. 드라이버 등록
public EmpDAO()
{
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch(Exception ex) {}
}
// 2. 오라클 연결
public void getConnection()
{
try
{
conn = DriverManager.getConnection(URL, "hr", "happy");
} catch(Exception ex) {}
}
// 3. 오라클 닫기
public void disConnection()
{
try
{
if(ps!=null) ps.close();
if(conn!=null) conn.close();
// exit
} catch(Exception ex) {}
}
// 4. 기능
// 4.1 목록 출력 - NVL 사용
// 클래스는 한명, 한개의 정보를 new에 저장 -> List에 보관
public ArrayList<Emp> empListData()
{
ArrayList<Emp> list = new ArrayList<Emp>();
try
{
// 1. 연결
getConnection();
// 2. SQL 문장 생성
String sql = "SELECT empno, ename, job, hiredate, sal, NVL(comm, 0) " + "FROM emp";
// 3. 오라클 전송
ps = conn.prepareStatement(sql);
// 4. 결과 값 받기
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;
}
// 4-2 상세보기 - WHERE 사용
// 4-3 검색 - LIKE 사용
}
package com.sist.user;
import java.util.*;
import com.sist.dao.*;
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() + " ");
}
}
}
'DB > Oracle' 카테고리의 다른 글
수업 36일차 - 스칼라 서브쿼리, 인라인뷰, 데이터정의언어(DDL) (0) | 2022.06.27 |
---|---|
수업 35일차 - 일반 함수, group by/having, join (0) | 2022.06.22 |
INNER JOIN, OUTER JOIN(LEFT, RIGHT, FULL) (0) | 2022.06.18 |
서브쿼리 (0) | 2022.06.18 |
ALIAS (0) | 2022.06.18 |