본문 바로가기

DataBase/DBMS

5.문자함수, 가상테이블

||'첨가할문자'

ex)SELECT CNAME, SUBSTR(CNAME,0,LENGTH(CNAME))||'과' FROM COURSE;

LOWER() : 소문자

UPPER() : 대문자

SUBSTR() : 부분문자열 추출

1.인덱스가 1부터 시작, 갯수 substr(문자열,인덱스,갯수)

2.인덱스 부터 갯수만큼 substr(문자열,인덱스) 인덱스부터 끝까지

3.뒤에서 인덱스기준 끝까지 substr(문자열,-인덱스) 

4.뒤에 인덱스기준 갯수만큼 출력 substr(문자열, - 인덱스, 갯수) 

LPAD(), RPAD() : 데이터 빈공간을 특정 문자로 채우는 것 LPAD('oracle',10,'#') 6글자(oracle) 나머지 4칸을 #으로 왼쪽에 채운다 (10글자 채우기위해서) RPAD('oracle',10,'*') 6글자(oracle) 나머지 4칸을 *으로 오른쪽에 채운다 (10글자 채우기위해서)

ex)SELECT 'ORACLE', LPAD('ORACLE',10,'#'),RPAD('ORACLE',10,'*') FROM DUAL;

LENGTH() :문자열 길이

 

 

MOD() : 나머지

TRUNC() : 버림

ROUND() : 반올림

ex)ROUND(3243.35444,2) 3243.35 ROUND(3245.3544,-2) 3200

 

날짜함수

-SYSDATE : 현재시간을 출력하는 함수, SYSDATE+1 : 내일, SYSDATE-1 : 어제

-ADD_MONTHS(날짜데이터,더할 개월 수,) NEXT_DAY(날짜데이터, 요일 문자) : 요일에 해당하는 가까운 날짜를 찾을 수 있다

ex)

SELECT LAST_NAME,HIRE_DATE 입사일, ROUND(SYSDATE-HIRE_DATE)||'일' 근속일,ROUND((SYSDATE-HIRE_DATE)/365,1)||'년' 근속년수 FROM EMPLOYEES;

SELECT SYSDATE, ADD_MONTHS(SYSDATE,2) FROM DUAL;

SELECT SYSDATE, NEXT_DAY(SYSDATE,'월요일') FROM DUAL;

 

변환함수

-TO_CHAR() : 숫자, 날짜 ⇒ 문자열 변환

예시)

SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD') FROM DUAL;

SELECT 50000000, TO_CHAR(50000000,'$999,999,999') FROM DUAL;

-TO_DATE() : 문자열 ⇒ 날짜로 변환

예시)

SELECT TO_DATE('2021-02-18','YYYY-MM-DD'), TO_DATE('20210219','YYYY-MM-DD') FROM DUAL;

 

NULL 값을 설정해주는거.

-NVL() : NULL을 0 또는 다른 Default 값으로 설정 

ex)

select employee_id, salary, commission_pct, nvl(commission_pct,0) from employees; 

-NVL2() : NULL값과 NULL값 아닌거 설정해줄때

ex)

SELECT NVL2(TO_CHAR(COMM),'X','O') "EXIST_COMM", COUNT(*) FROM EMP GROUP BY NVL2(TO_CHAR(COMM),'X','O');

 

DECODE() : DECODE(컬럼, 값1, 값1을변경해줄값1, 값2, 값2를 변경해줄값, '해당되지않는값2, 나머지 값') 

ex)SELECT JOB_ID, DECODE(JOB_ID,'SA_MAN','SALES DEPT', 'ANOTHER') FROM EMPLOYEES;

CASE WHEN THEN :

1. CASE 다음에 컬럼명 써주었을 때,

SELECET 컬럼명,

CASE 컬럼명

WHEN 값1 THEN 변경해줄 값1

WHEN 값2 THEN 변경해줄 값2

ELSE '나머지해당되지않는 값"

END "CASE"

FROM 테이블명;

ex1)

SELECT JOB_ID,

CASE JOB_ID

WHEN 'SA_MAN' THEN 'SALES DEPT'

ELSE 'ANOTER2'

END "CASE"

FROM EMPLOYEES;

2. CASE다음에 컬럼명 안썼을때 조건하고 END 하고 별칭부여

SELECT 컬럼명,

CASE

WHEN 조건1 THEN 값1

WHEN 조건2 THEN 값2

WHEN 조건3 THEN 값3

ELSE 값

END AS 별칭(컬럼명)

FROM 테이블명

ex2)

SELECT EMPNO, ENAME, MGR,

CASE

WHEN MGR IS NULL THEN '0000' WHEN SUBSTR(MGR,1,2)='78' THEN '8888' WHEN SUBSTR(MGR,1,2)='77' THEN '7777' WHEN SUBSTR(MGR,1,2)='76' THEN '6666' WHEN SUBSTR(MGR,1,2)='75' THEN '5555' ELSE TO_CHAR(MGR) END AS CHG_MGR FROM EMP;

 

ROLLUP() 그룹함수에서 이용 :각 그룹별 총계를 구하는 함수