일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- distinct
- Oracle DB
- SQL
- oracle
- HTML
- 이클립스
- alias
- Oracle SQL
- JavaScript
- 부트스트랩
- JSP
- rownum
- HTTP Status 404
- jQuery
- tomcat
- ||
- 제약조건
- 과정평가형
- HTTP Status 500
- 성적프로그램
- github
- Bootstrap
- 답변형 게시판
- sql developer
- Java
- group by
- git
- 한글 인코딩
- CRUD
- 모조칼럼
초급의 끄적거림
[SQL] 함수 본문
[ASCII 문자변환]
select chr(65) from dual; | 대문자 A |
select chr(97) from dual; | 소문자 a |
[ || 결합연산자]
⊙ A || B : A와 B를 연결시킴
select ename || '의 직급은 ' || job || '입니다' from emp;
[concat (칼럼명, '문자열')]
⊙ 칼럼에 해당하는 문자열을 붙임
select concat ('로미오와', '줄리엣') from dual;
select concat(ename, '의 직급은'), job from emp;
select concat(concat(ename, '직급은'), job) from emp;
[sysdate]
⊙ 시스템의 현재 날짜/시간을 리턴하는 함수
select sysdate from dual;
select sysdate+100 from dual;
select sysdate-100 from dual;
[★ rownum / rowid ★]
⊙ rownum : 행(레코드) 번호 (주로 메이커에서 알아서 붙여주는 번호)
⊙ rowid : 행(레코드)의 주소값 (그 줄이 있는 곳의 메모리 주소값, 사용빈도 ↓
⊙ 의사칼럼 (모조칼럼)
select empno, ename from emp;
select rownum, empno, ename from emp;
select rowid, empno, ename from emp;
select rownum, rowid, empno, ename
from emp;
[날짜 함수]
⊙ 두 날짜 사이의 개월 수 계산 함수
: select months_between ('YYYY-MM-DD', 'YYYY-MM-DD') from dual; - 앞 날짜에서 뒤 날짜를 빼기 때문에 앞 날짜가 커야함
select months_between('2019-09-01','2019-07-05') from dual;
⊙ to date('날짜문자열') : 문자열을 날짜형으로 변환
select to_date('2019-05-20') from dual;
select to_date('2019-05-20')-to_date('2019-05-05') from dual;
⊙ to char(날짜, '출력형식') : 날짜자료형의 데이터를 문자변환한 함수
select to_char(sysdate, 'yyyy-mm-dd hh:mi:ss day') from dual;
select to_cahr(sysdate, 'yyyy-mm-dd 24hh:mi:ss day') from dual;
[숫자 함수]
⊙ to_number('숫자 형태의 문자열') → 내부적으로 to_number()가 호출됨
select 100+10, 100-10, 100*10, 100/10 from dual;
select '100'+1 from dual; ▶ 문자열 100 +1 java에서는 불가능하지만 db에서는 101이 나오면서 가능
= select to_number('100')+1 from dual;
trunc(숫자1, 자리수) | 버림, 숫자1을 소수점 자리수에서 절사 |
round(숫자1, 자리수) | 반올림, 숫자1을 소수점 자리수에서 반올림 |
ceil(숫자1) | 올림 |
⊙ 예제
문) 급여평균, 급여합계, 최고급여, 최저급여, 개수 select avg(sal), sum(sal), max(sal), min(sal), count(sal) from emp; - null값은 count 되지 않음 select avg(sal), round(avg(sal),2), ceil(avg(sal)), trunc(avg(sal),1) from emp; |
문) 각 직원들에 대해서 직원의 이름과 근속연수(오늘날짜-입사일)를 구하시오. (단, 근속연수는 연단위를 버림하여 나타내시오) ① 오늘날짜 - 입사일 = 일한 날수 select ename, sysdate-hiredate from emp;
② 근속연수를 구해야하기 때문에 일한 날 수/365 select ename, (sysdate-hiredate)/365 from emp;
③ 연단위만 남기고 버림 select ename, trunc((sysdate-hiredate)/365),1) as 근속연수 from emp; |
[decode 함수]
⊙ decode (A, B, A==B일 때의 값, A<>B일 때의 값)
A<>B일 때의 값을 생략하면 null로 처리됨, decode 함수의 매개변수의 개수는 다중조건에 의해 늘어날 수 있다
⊙ 예제
예) SQL문은 인덱스가 1부터 시작, 주민번호를 이용해서 성별 출력
select substr('8912303', 7, 1) from dual; - 3 이 나와서 남자임을 알 수 있음
select decode(substr('8912303', 7, 1), 3, '남자', '여자') from dual;
→ substr('8912303', 7, 1) 가 3이 맞으면 '남자', 아니면 '여자'
[lpad 함수]
⊙ lpad(칼럼명, 채워야할 총 자리수, '못 채웠을 경우 대신 들어갈 내용')
문) 각 직원의 이름, 직급, 급여가 300이상인 직원만을 나타내는데 단, 급여는 5자리로 나타내며 부족한 자리수는 '*'로 표시한다.
select ename, job, lpad(sal, 5, '*')
from emp
where sal>=300;
'DB > Oracle' 카테고리의 다른 글
[SQL] 서브쿼리 (Sub Query) (0) | 2019.07.23 |
---|---|
[SQL] group 외 예제 (0) | 2019.07.23 |
[SQL] 활용 연습 문제 (1) | 2019.07.22 |
[SQL] 시퀀스 / distinct / 조건절 (0) | 2019.07.21 |
[SQL] 제약조건 (constraint) 2 (0) | 2019.07.20 |