
SELECT ROUND(3.141592) --3
, ROUND(3.141592, 2) --3.14
, ROUND(123.141592,-1) --120
FROM dual;SELECT TRUNC(3.541592) --3
, TRUNC(3.146592, 2) --3.14
, TRUNC(125.141592,-1) --120
FROM dual;SELECT CEIL(3.141592) --4
, CEIL(3.141592*100)/100 --3.15
, CEIL(123.141592/10)*10 --130
FROM dual;SELECT CONCAT('두부','쿠키') --'두부쿠키'
FROM dual;SELECT INSTR('abcdabcdabcd', 'bc') -- 2
, INSTR('abcdabcdabcd', 'bc', 3) -- 6
, INSTR('abcdabcdabcd', 'bc', 3, 2) -- 10
, INSTR('abcdabcdabcd', 'bc', -1, 1) -- 10
FROM dual;| 종류 | 내용 |
|---|---|
| SYSDATE | 시스템의 날짜 정보를 가져오는 함수 |
| CURRENT_DATE | 시스템의 현재 날짜 정보를 가져오는 함수 |
| CURRENT_TIMESTAMP | 시스템의 현재 타임스탬프 날짜 정보를 가져오는 함수 |
| EXTRACT(datetime) | datetime이나 interval 값으로 특정 날짜/시간 정보를 추출 |
SELECT CURRENT_TIMESTAMP,
TRUNC(CURRENT_TIMESTAMP),
-- 시간 정보를 절삭 / 00:00:00
TRUNC(CURRENT_TIMESTAMP, 'DD'),
-- 일까지 출력 시 밑으로 절삭 / 00:00:00
TRUNC(CURRENT_TIMESTAMP, 'MM'),
-- 월까지 출력 일 밑으로 절삭 / 22/04/01
TRUNC(CURRENT_TIMESTAMP, 'YY'),
-- 년까지 출력 월 밑으로 절삭 / 22/01/01
TRUNC(CURRENT_TIMESTAMP, 'DAY')
-- 요일 / 그 주의 첫날(일요일) 22/04/03
FROM dual;| 연산 | 결과 |
|---|---|
| 날짜 - 날짜 | = 숫자 (차이 일수) |
| 날짜 ± 숫자 | = 날짜 (숫자만큼 전(후) 날짜) |
| 날짜 ± 숫자/24 | = 날짜 (숫자만큼의 시간 차이) |
SELECT MONTHS_BETWEEN(SYSDATE, hiredate), -- 고용일로부터 지난 개월수
MONTHS_BETWEEN(hiredate , SYSDATE)/12 -- 년수 계산
FROM emp;SELECT ADD_MONTHS(TO_DATE('02-28-2022', 'MM-DD-YYYY'), 1), -- 3월31일
ADD_MONTHS(TO_DATE('02-27-2022', 'MM-DD-YYYY'), 1) -- 3월27일
FROM dual;| 기호 | 내용 | 기호 | 내용 |
|---|---|---|---|
| 년 | Y,YY,YYY,YYYY,RR,RRRR,... | 월 | MM, MONTH, MON |
| 일 | DD(일/월) D(일/주) DDD(일/년) | 요일 | DY, DAY |
| 시 | HH, HH12, HH24 | 분 | MI |
| 초 | SS, SSSSS | 오전오후 | AM, PM |
SELECT TO_CHAR(SYSDATE, 'YYYY') -- '2022' 문자열로 출력
FROM dual;SELECT TO_DATE('2022.04.11'), -- 22/02/11(날짜형)
TO_DATE('04.11.2022', 'MM,DD,YYYY'), --22/02/11(날짜형)
TO_DATE('2022.04', 'YYYY.MM'), --22/04/01 : 일 입력 안하면 1일로 변환
TO_DATE('11', 'DD') -- 22/04/11 : 년, 월 입력 안하면 해당년 해당월로 변환
FROM dual;| 기호 | 내용 | 기호 | 내용 |
|---|---|---|---|
| 9 | 숫자 | 0 | 숫자, 공백 시 0으로 채움 |
| , | 쉼표 표기 | . | |
| L | local currency symbol |
SELECT TO_CHAR(1234567, '9,999,999'), -- '1,234,567'
TO_CHAR(1234567, 'L9,999,999.99'), -- '₩1,234,567.00'
TO_CHAR(12, '0999') -- '0012'
FROM dual;SELECT DECODE(x, 1,A, 10,B, 12,C, 14,D, E)
FROM dual;SELECT CASE x
WHEN 1 THEN 'A'
WHEN 10 THEN 'B'
WHEN 12 THEN 'C'
WHEN 14 THEN 'D'
ELSE 'E'
END
FROM dual;SELECT emp.*,
CASE
WHEN deptno IN (10, 20) THEN 'A팀'
ELSE 'B팀'
END AS "팀명"
FROM emp;
-- deptno가 10, 20인 사원은 A팀 나머지는 B팀RANK ( ) OVER ([PARITION BY 절] ORDER BY절 )DENSE_RANK ( ) OVER ([PARITION BY 절] ORDER BY절 )ROW_NUMBER( ) OVER ([PARITION BY 절] ORDER BY절 )FIRST_VALUE(expr) OVER ([PARITION BY 절] ORDER BY절 )LAST_VALUE(expr) OVER ([PARITION BY 절] ORDER BY절 )SELECT
TRIM('*' FROM '***AD***MIN***') -- 'AD***MIN' 출력
FROM dual;ELECT *
FROM (PIVOT할 쿼리문)
PIVOT (그룹함수(집계컬럼) FOR 피벗컬럼 IN (피벗컬럼값 AS 별칭 ...);SELECT
ROUND(dbms_random.value,1) "0~1",
ROUND(dbms_random.value(0, 100),1) "1~100",-- 0 <= 실수 < 100
TRUNC(dbms_random.value(0, 45)) + 1 lotto,
dbms_random.string('U', 5) "upper", --대문자
dbms_random.string('L', 5) "lower", --소문자
dbms_random.string('A', 5) "eng", --대문자 + 소문자
dbms_random.string('X', 5) "eng+num", --대문자 + 숫자
dbms_random.string('P', 5) "eng+특수" -- 알파벳 + 특수문자
FROM dual;SELECT COUNT(*)
FROM emp
WHERE deptno =10;
-- deptno가 10인 레코드 수 / 3
SELECT COUNT(DISTINCT deptno)
FROM emp;
-- 중복을 제외한 deptno컬럼의 수 / 3(10, 20, 30)COUNT([DISTINCT ¦ ALL] expr1) OVER ([PARTITION BY expr2] ORDER BY expr3)