function namc | (arg1, arg2, ...) |
LOWER
: 소문자로 변환
UPPER
: 대문자로 변환
INITCAP
: 각 단어의 첫 글자만 대문자로 변환
LOWER('SQL Course') --> sql course
UPPER('SQL Course') --> SQL COURSE
INITCAP('SQL Course') --> Sql Course
SELECT last_name, UPPER(last_name), LOWER(last_name), INITCAP(last_name)
FROM employees ;
CONCAT
: 서로 연결된 결과 리턴(연결 연산자와 결과 동일함)
SUBSTR
: 시작위치와 리턴할 문자 개수
LENGTH
: 전체 길이 리턴
INSTR
: 해당 문자가 몇번째에 위치하는지 리턴
LPAD
RPAD
L/RPAD(column명, 자릿수, 입력값)
CONCAT('Hello', 'World') --> HelloWorld
SUBSTR('HelloWorld', 1, 5) --> Hello
LENGTH('HelloWorld') --> 10
INSTR('HelloWorld', 'W') --> 6
LPAD(salary, 10, '*') --> *****24000
RPAD(salary, 10, '*') --> 24000*****
ㄴ salary컬럼의 자릿수를 10자리로 맞춰놓으면서 남는 오른쪽 자리에 *를 표시해라는 의미
select concat(concat(last_name, '''s job category is '), job_id) "Job"
from employees
where substr(job_id, 4) = 'REP';
select employee_id, concat(first_name, last_name) NAME,
length(last_name), instr(last_name, 'a') "Contains 'a'?"
from employees
where substr(last_name, -1, 1) = 'n';
ㄴ 마지막 한자리의 문자가 n인 행들을 검색해라
select last_name,
upper(concat(substr(last_name, 1, 8), '_US'))
from employees
where department_id = 60;
ROUND
: 지정된 소수점 자릿수로 값을 반올림
TRUNC
: 지정된 소수점 자릿수로 값을 truncate함(값을 버림)
CEIL
: 지정된 수 이상인 가장 작은 정수 반환
FLOOR
: 지정된 수 이하인 가장 큰 정수 반환
MOD
: 나눈 나머지 반환
ROUND(45.926, 2) --> 45.93
TRUNC(45.926, 2) --> 45.92
CEIL(2.83) --> 3
FLOOR(2.83) --> 2
MOD(1600, 300) --> 100
SELECT 58.567
,ROUND(58.567, 2)
,ROUND(58.567, 0)
,ROUND(58.567, -1)
FROM dual;
하나의 행 결과만 필요할 때 -> from dual;
DUAL
: 함수 및 계산의 결과를 볼 때 사용할 수 있는 공용(public) 테이블
ROUND(58.567, -1)
: 음수로 지정하면, 1의 자릿값을 이용해서 반올림
SELECT 58.567
,TRUNC(58.567, 2)
,TRUNC(58.567, 0)
,TRUNC(58.567, -1)
FROM dual ;
TRUNC(58.567, -1)
: 1의 자릿값을 무조건 0으로 만듦
employee_id가 짝수인 사원 레코드 표시
select employee_id as "Even Numbers", last_name
from employees
where mod(employee_id, 2) = 0;
ALTER SESSION SET nls_date_format = 'YYYY/MM/DD HH24:MI:SS' ;
SELECT TO_DATE('95/10/27','YY/MM/DD')
,TO_DATE('95/10/27','RR/MM/DD')
FROM dual ;
/* 결과
2095/10/27 00:00:00
1995/10/27 00:00:00 */
YY
: 현재 세기RR
: 현재에 근접한 세기RR
을 사용하는 편이 좋음SYSDATE 함수는 날짜, 시간
을 반환함
SELECT SYSDATE
FROM dual ;
SELECT SYSDATE, CURRENT_DATE
FROM dual ;
SELECT SYSTIMESTAMP, CURRENT_TIMESTAMP
FROM dual ;
SELECT SYSDATE, SYSDATE + 10, SYSDATE - 10
FROM dual ;
SELECT SYSDATE, SYSDATE + 1/24, SYSDATE + 5/1440
FROM dual ;
SELECT last_name, hire_date, SYSDATE - hire_date
FROM employees ;
SYSDATE + 1/24
: 현재 시간에 1시간 더함SYSDATE + 5/1440
: 현재 시간에 5분 더함 (60*24 = 1440)SYSDATE + hire_date
--> 오류남select last_name, (sysdate - hire_date)/7 as WEEKS
from employees
where department_id = 90;
MONTHS_BETWEEN
: 두 날짜 간의 월 수
ADD_MONTHS
: 날짜에 월 추가
NEXT_DAY
: 지정된 날짜의 요일
LAST_DAY
: 월의 마지막 날
ROUND
: 날짜 반올림
TRUNC
: 날짜 truncate(절삭)
SELECT hire_date
,ADD_MONTHS(hire_date, 2)
,MONTHS_BETWEEN(SYSDATE, hire_date)
FROM employees ;
SELECT hire_date
,NEXT_DAY(hire_date, '금요일')
,LAST_DAY(hire_date)
FROM employees ;
SELECT SYSDATE
,ROUND(SYSDATE,'YYYY')
,ROUND(SYSDATE,'MM')
,ROUND(SYSDATE,'DD')
FROM dual ;
SELECT SYSDATE
,TRUNC(SYSDATE,'YYYY')
,TRUNC(SYSDATE,'MM')
,TRUNC(SYSDATE,'DD')
FROM dual ;
SYSDATE
--> 2025/05/23 21:21:36ROUND(SYSDATE,'YYYY')
--> 2025/01/01 00:00:00ROUND(SYSDATE,'MM')
--> 2025/06/01 00:00:00ROUND(SYSDATE,'DD')
--> 2025/05/24 00:00:00MONTHS_BETWEEN('01-SEP-05', '11-JAN-04')
--> 19.6774194
ADD_MONTHS('31-JAN-04', 1)
--> '29-FEB-04'
NEXT_DAY('01-SEP-05', 'FRIDAY')
--> '08-SEP-05'
LAST_DAY('01-FEB-05')
--> '28-FEB-05'