1.LTRIM, RTRIM
10번부서에서 이름, 직업, 월급을 출력하되, 담당업무 좌측에 S를 삭제하고, 급여 우측의 0을 삭제하라
SELECT ENAME, JOB, LTRIM(JOB,'S'), SAL, RTRIM(SAL,0) FROM EMP
WHERE DEPTNO=10;
2.REPLACE TRANLATE
SELECT ENAME, REPLACE(ENAME, 'SM', '*?') FROM EMP; #완전한 글자가 있어야 치환
SELECT ENAME, TRANSLATE(ENAME, 'SC', '*?') FROM EMP; #1대1 대응으로 치환
3. 숫자함수
ROUND
TRUNC
MOD(M,N): M나누기 N 나머지
ABS 절댓값
FLOOR : MAX 이상 (끝숫자를 포함) (INTEGER)
CEIL: MIN 이하
SING: 1, -1, 0
POWER(M,N) ; M의 N승
#RSE1이라고 주는건 그냥 ROUND(456.78)이 너무 길어서. 기본적으로 정수값으로 리턴
# FROM DUAL: 더미테이블
#ROUND(N,M): M의자리까지 표시하라는 소리인가봄. 그렇다면 반올림은 M+1에서 할것
#TRUNC(456.678,2):456.67
#TRUNC(456.678,-2) : 400
4. 날짜 : 무조건 싱글쿼터. 표기방식확인
HIREDATE >= '81/09/09'
HIREDATE >= '81-09-09'
HIREDATE >= '1981/09/09'
century, year, month, day, hours, minutes, seconds= 7bytes
기본 date format : 'RR/MM/DD', 'DD-MON-RR'
RR= Y2K 고려해서 년도표기 (00~49: 2000년대, 50~99:1900s)
ex) 81/09/28: 1981/09/28
#1910년 표시하고 싶으면 4자리로 그대로 표시하면 됨.
ex) 2021년 5월 5일 오후 3시 10분 11초 :
화면상 표시 05-may-21(DD-MM-RR)
내부저장 (7바이트): 20 21 05 05 15 10 11 (각각 century, year, month, day, hour, minute, second)
날짜끼리 연산가능
date+ date : 숫자로 표시
date+ num : 날짜로 표시
date+ num/24: 시간을 더함. 다음날로 넘어감. 날짜로 표시
5,
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD-HH:MI:SS') FROM DUAL;
#TO_CHAR: 문자로 변환
systimestamp: 타임스탬프 with 타임존 형식의 시스템 날짜 리턴
current_date: 현재 세션의 날짜정보를 일/월/년도 24시 :분:초 리턴
current_timestamp: 타임스탬프 윗 타임존 형식으로 current_date 세션타임존 형식으로 리턴
extract: datetime 혹은 interval의 값 표현형식에 지정된 datetime 필드의 값을 추출해서 리턴
ex) 오늘날짜에서 년도만 출력하기
SELECT EXTRACT (YEAR FROM SYSDATE) FROM DUAL;
SELECT ENAME, EXTRACT (MONTH FROM HIREDATE) FROM EMP;
MONTH_BETWEEN(D1,D2): 날짜 경과를 개월수로 리턴
ADD_MONTH(D1, NUM): D1날짜에 N개월 더샇
NEXT_DAY(D1, 'CHAR'): D1날짜보다 이후이며 'CHAR'에 지정한 요일에 해당하는 날짜
LAST_DAY: 해당월의 마지막 날짜
6. 사원테이블에서 현재까지 근무일수가 몇주, 몇일인지 조회한다.
SELECT ENAME, HIREDATE, SYSDATE, (SYSDATE-HIREDATE) TOTALDAYS,
TRUNC( (SYSDATE-HIREDATE)/7) WEEKS,
ROUND( MOD( (SYSDATE-HIREDATE), 7) ) DAYS FROM EMP
ORDER BY 4 DESC;
7. 사원 테이블에서 10번부서 사원의 입사일로부터 5개월 지난날짜 계산하여 출력
SELECT HIREDATE, ADD_MONTHS(HIREDATE, 5) FROM EMP WHERE DEPTNO=10;
8, 사원테이블에서 10번부서 사원의 입사일로부터 돌아오는 금요일 계산
SELECT ENAME, HIREDATE, NEXT_DAY(HIREDATE, 6) FROM EMP
WHERE DEPTNO=10;
# 일요일이 1, 금요일은 6
"시험에 자주 나오는 분석함수"
ANALYTIC
AVG
CORR
COUNT
COVAR_POP
COVAR_SAMP
FIRST_VALUE
LAST_VALUE
MAX
MIN
NTH_VALUE
PERCET_RANK
RANK
RATIO TO REPORT
NCD>>
-> TO_CHAR
NUMBER CHARACTER
<- TO_NUMBER
->TO_CHAR
DATE CHARACTER
<- TO_DATE
9.T0_CHAR
숫자 FORMAT :
숫자(9,0), 그룹 구분자(,), G, 소수점, 통화$ L, 공백제거 FM
표기법 EEEE(지수), RN(로마표기자), rn, X(16진수)
기호표시 MI: 숫자가 음수인경우 마지막에 -
PR: 음수인경우 <> 안에 숫자표시
S: 음수인경우 숫자앞에 -
SELECT TO_CHAR(12.3, '009.90') FROM DUAL;
=> 012.30
SELECT TO_CHAR(12345, '099,999.9') AS RES FROM DUAL;
=>012,345.0
SELECT TO_CHAR(12345, 'L099,999.9') AS RES FROM DUAL;
-> \012,345.0
SELECT TO_CHAR(12345, 'FM999,999.9') AS RES FROM DUAL;
12,345.
SELECT TO_CHAR(12345, '9.9EEEE') AS RES FROM DUAL;
1.2E+04
SELECT TO_CHAR(-123, '999MI') AS RES FROM DUAL;
123-
SELECT TO_CHAR(-123, '999PR') AS RES FROM DUAL;
<123>
SELECT TO_CHAR(-123, 'S999') AS RES FROM DUAL;
-123
10. 날짜 FORMAT