#단일행 함수
문자함수 | 변환함수 | UPPER : 대문자로 변환 LOWER : 소문자로 변환 INITCAP : 맨 앞글자만 대문자 변환 |
SELECT UPPER('ShIn'), LOWER('ShIn'), INITCAP('ShIn') FROM DUAL; → SHIN, shin, Shin ***DUAL : 임시테이블 |
REPLACE('원래 문자열',' 바꿀문자', '바뀔문자') |
SELECT ENAME, REPLACE(ENAME, 'A','M') FROM EMP; 원래이름 ADAM→MDMM |
||
제어함수 | CONCAT('A','B') : 문자열 결합 |
SELECT CONCAT('HELLO ','ORACLE'), 'HELLO '||'ORACLE' FROM DUAL; →HELLO ORACEL (동일한 문장) |
|
SUBSTR(문자열, 시작위치, 자를 개수) :문자열을 원하는만큼 자름 (cf. substirng() in Java) →포함된 문자열 찾을때(cf. %) |
SELECT SUBSTR('HELLO ORACLE',7,3) ('HELLO ORACLE',-6,3) FROM DUAL; →ORA(∵ -6→뒤에서 6번째부터) SELECT * FROM emp WHERE SUBSTR(ename,3,1)='A'; = SELECT * FROM emp WHERE ename LIKE '__A%'; : 이름 세 번째 글자가 A인 사람 |
||
INSTR(원래 문자열, 찾을 문자, 시작글자, n번째 찾을 문자) : 특정문자 위치 찾기 (cf. Java: indexOf() ) |
SELECT INSTR('A/B/C/D','/',3,2) FROM DUAL; →6 |
||
기타함수 | LENGTH : 문자길이 LENGTHB : Byte수 |
SELECT LENGTH('홍길동') LENGTHB('홍길동') → 3, 9(원래 한글 각 2byte*3글자=6이지만 컴퓨터 사양마다 다르게 출력되기도 함) SELECT ename FROM emp WHERE LENGTH(ename)=5; →emp 파일에서 5자 이름을 가진 사람 모두 출력 |
|
RPAD/LPAD(문자열, 전체 자리수, 자리 수 부족할 때 채울 문자) (ex. ID/비밀번호 찾기할 때, ad***) |
SELECT RPAD('SCOTT',10,'*') FROM DUAL; → SCOTT***** (→ LPAD : *****SCOTT) SELECT ename, RPAD(SUBSTR(ename,1,2), LENGTH(ename),'*') FROM emp; →이름 2자만 노출 |
||
TRIM('지울 문자' FROM '원래문자열') RTRIM/LTRIM('원래문자열', ' 지울 문자') : 지정 문자 제거 |
SELECT LTRIM (LTRIM(' AAAAABBBAAAAA'),'A') FROM DUAL; SELECT TRIM('A' FROM 'AAAAABBBAAAAA') FROM DUAL; |
||
숫자함수 | ROUND(실수, 원하는 자리수) :반올림 | ROUND(987.654,2) → 987.65 소수점 2자리 ROUND(987.654,0) → 988, 소수점 0자리 ROUND(987.654,-1) → 990, 1의자리 반올림 |
|
TRUNC(실수, 원하는 자리수) :버림 | TRUNC(987.654,2) → 987.65 TRUNC(987.654,0) → 987 |
||
CEIL(실수) : 올림, 페이지 수 구할 때 사용 |
CEIL(987.354) → 988 소수점 첫째자리에서 반올림 SELECT CEIL(COUNT(*)/7) FROM genie_music; → 목록개수를 7로 나눠서 페이지수 출력 |
||
MOD(a,b) :나머지, a%b in Java | SELECT empno, ename FROM emp WHERE MOD(empno,2)=0; → emp에서 사번이 짝수인 사원의 사번, 이름 |
||
날짜함수 |
SYSDATE :시스템 날짜, 시간 | SELECT SYSDATE-1, SYSDATE, SYSDATE+1 FROM DUAL; →어제, 오늘, 내일 날짜 출력 |
|
MONTHS_BETWEEN :기간의 개월수 | SELECT | ||
ADD_MONTHS(날짜,개월) :입력한 날짜에 입력개월을 추가 |
SELECT ADD_MONTHS(SYSDATE,6) FROM DUAL; → 오늘로부터 6개월 후 '20/08/07'처럼 특정 날짜 입력가능. |
||
NEXT_DAY(날짜, '금') :오늘을 제외한, 가장 가까운 금요일 |
오늘: 20/08/07(금), SELECT NEXT_DAY(SYSDATE,'금') →2020/08/14 |
||
LAST_DAY(날짜) :입력된달 마지막날짜 | SELECT LAST_DAY(SYSDATE) FROM DUAL; →20/08/31 |
||
변환함수 | TO_CHAR | 문자열 변환 *날짜: 문자열(대소문자 구분X) 연도: YYYY/RRRR/YY/RR/YEAR(영문) 월: MM / MON:영문3자(ex.AUG) / MONTH:전체영문 일: DD / DAY(요일) / DDTH(00TH) 시간: HH(12시간)/HH24/MI(분)/SS(초) SELECT TO_CHAR(SYSDATE,'YYYY-MM -DD HH24:MI:SS') FROM DUAL; →2020-08-07 17:42:05 *정수 → 문자열 9 : TO_CHAR(1234, '9,999') → 1,234 $: TO_CHAR(sal, '$9,999,999') → $월급 L: TO_CHAR(1234, 'L9,999') → \1,234 |
|
TO_NUMBER(원래문자열, 문자열형태) | 정수 변환 TO_NUMBER('5,000','9,999') FROM DUAL; |
||
기타(일반)함수 | NVL(null이 들어있는 칼럼명, 바꿀값) : NULL값을 다른 값으로 변경 |
SELECT ename,sal,comm,sal+NVL(comm,0) FROM emp; SELECT zipcode, sido, gugun, dong, NVL(bunji,' ') FROM zipcode; (단, 바꿀값에 공백 하나 이상은 무조건 줘야함) |
|
DECODE(컬럼명, 값, 출력값 값, 출력값, 값, 출력값) : 다중 if ( ↔ CASE 선택문과 호환 ) |
SELECT title, DECODE(state,'유지','-', '상승','▲', '하강','▼', 'new','new') AS 상태 FROM genie_music; SELECT title, CASE WHEN state='유지' THEN '-' WHEN state='상승' THEN '▲' 콤마 없음!! WHEN state='하강' THEN '▼' END "상태" FROM genie_music; |
||
RANK() OVER: 순위(일반적) DENSE_RANK() OVER: 공동순위 발생시 순위 비우지 않고 출력 ( 1등 2명 있어도 2등 출력) |
SELECT ename,sal,RANK() OVER(ORDER BY sal) AS rank FROM emp; SELECT ename,sal,DENSE_RANK() OVER(ORDER BY sal DESC) as rank FROM emp; |
'SQL(Oracle) > Oracle 이론 정리' 카테고리의 다른 글
[Oracle] JOIN (0) | 2020.08.12 |
---|---|
[Oracle] 정규식 함수/그룹함수 (2) | 2020.08.10 |
[Oracle] SELECT / WHERE / GROUP BY / HAVING / ORDER BY (0) | 2020.08.05 |
[Oracle] 연산자 / 집합연산자 (0) | 2020.08.05 |
[Oracle] SQL 명령어/작성시 주의점/데이터형 (2) | 2020.08.04 |
댓글