mingming

Oracle - 단일 행 함수 본문

새싹 하이브리드 클라우드/Database

Oracle - 단일 행 함수

mingming_96 2023. 10. 9. 02:23

단일 행 함수

  • 데이터 항목을 조작한다.
  • 인수를 사용하고 하나의 값을 반환한다.
  • 반환되는 각 행에서 실행된다.
  • 데이터 유형을 수정할 수 있다.
  • 중첩될 수있다.
  • 열이나 표현식을 인수로 사용할 수 있다. 
function_name [arg1, arg2, ...]

 

문자 함수

함수 용도
LOWER 영문자 값을 소문자로 변환한다.
UPPER 영문자 값을 대문자로 변환한다.
INICAP 영문자 값의 첫 번쨰 문자를 대문자로 변환하고 나머지는 소문자로 둡니다. 
CONCAT 첫 번쨰 문자 값을 두 번쨰 문자 값과 연결합니다. 연결 연산자 (||) 와 같은 기능입니다.
SUBSTR m 위치에서 시작하는 문자 값에서 n개의 문자 길이만큼 지정된 문자를 반환합니다(m이 음수인 경우 문자 끝에서부터 카운트를 시작한다. n이 생략된 경우 문자열의 끝까지 모든 문자가 반환됩니다.)
LENGTH 표현식의 문자 수를 반환한다.
INSTR 지정된 문자열의 숫자 위치를 반환한다. 선택적으로검색 시작위치 m과 문자열의 발생 수 n을 제공할 수 있따. M과 n의 기본값은 1이며, 이 경우 문자열의 처음부터 검색을 시작하고 첫 번쨰로 찾은 결과를 보고한다.  
LPAD
RPAD
길이가 n이 되도록 왼쪽부터 문자식으로 채운 표현식을 반환한다.
길이가 n이 되도록 오른쪽부터 문자식으로 채운 표현식을 반환합니다. 
TRIM 문자열에서 선행 또는 후행문자를 자를 수 있다. 
REPLACE  텍스트 표현식에서 문자열을 검색하여 해당 문자열을 찾으면 지정된 대체 문자열로 바꿉니다.

 

대소문자 변환 함수

함수 결과
LOWER('SQL Coure') sql course
UPPER('SQL Cours') SQL COURSE
INITCAP('SQL Course') SQL course
## 사원 Higgings의 사원 번호, 이름 및 부서 번호를 표시한다.

SELECT employee_id, last_name, department_id
FROM employees
WHERE last_name = 'higgins';

SELECT employee_id, last_name, department_id
FROM employees
WHERE LOWER(last_name) = 'higgins';

 

문자 조작 함수

함수 결과
CONCAT('Hello', 'World') HelloWorld
SUBSTR('HelloWorld',1,5) Hello
LENGTH('HelloWorld') 10
INSTR('HelloWorld', 'W') 6
  • CONCAT : 값을 함께 조인한다(CONCAT에서 사용할 수 있는 파라미터는 두 개로 제한됨)
  • SUBSTR : 지정된 길이의 문자열을 추출한다.
  • LENGTH : 문자열 길이를 숫자 값으로 표시한다.
  • INSTR : 명명된 문자의 숫자 위치를 찾는다.
SELECT CONCAT(CONCAT(last_name, '"s job category is '), job_id) "JOB"
FROM employees
WHERE SUBSTR(job_id,4) = 'REP'; ## 4째 문자부터 시작하는 스트링

SELECT last_name ||'''s job category is '|| job_id AS JOB
FROM employees
WHERE job_id LIKE '%REP%'

SELECT employee_id, CONCAT(first_name,last_name) NAME,
LENGTH(last_name) "Last_name length", INSTR(last_name,'a') "Contains 'a'?"
FROM employees
WHERE SUBSTR(last_name, -1, 1) = 'n'; ## SUBSTR(문자열, 시작위치, 길이)

SELECT employee_id, first_name || last_name AS NAME,
LENGTH(last_name) AS "Last_name length", INSTR(last_name, 'a') AS "Contains a ?"
FROM employees
WHERE last_name LIKE '%n';

 

함수 중첩

  • 단일 행 함수는 어떠한 레벨로도 중첩될 수 있습니다.
  • 중첩 함수는 가장 깊은 레벨에서 덜 깊은 레벨로 평가됩니다.
F3(F2(F1(col,arg1),arg2),arg3)
SELECT last_name, UPPER(CONCAT(SUBSTR(last_name, 1, 8), '_US'))
FROM employees
WHERE department_id = 60;

 

숫자 함수

  • ROUND : 지정된 소수점 자릿수로 값을 반올림한다.
  • TRUNC : 지정된 소수점 자릿수로 값을 truncate한다.
  • CELL : 지정된 수 이상인 가장 작은 정수를 반환한다.
  • FLOOR : 지정된 수 이하인 가장 큰 정수를 반환한다.
  • MOD : 나눈 나머지를 반환한다.
함수 결과
ROUND(46.926, 2) 45.93
TRUNC(45.926, 2) 45.92
CELL(2.83) 3
FLOOR(2.83) 2
MOD(1600,300) 100

 

ROUND 함수 

SELECT ROUND(45.923,2), ROUND(45.923,0) , ROUND(45.923 -1)
FROM DUAL
## 45.92,  46, 45

 

TRUNC 함수

SELECT TRUNC(45.923), TRUNC(45.923), TRUNC(45.923, -1)
FROM DUAL;
## 45,  45,  40

 

MOD 함수

SELECT employee_id AS "Event Num", last_name
FROM employees
WHERE MOD(employee_id, 2) = 0
ORDER BY 1;

 

날짜 작업

  • Oracle Database는 내부 숫자 형식(세기, 년, 월, 일, 시, 분, 초)으로 날짜를 저장한다.
  • 기본 날짜 표시 형식은 DD-MON-RR 입니다.
  • 연도의 마지막 두 자릿수만 지정하면  21세기 날짜를 20세기에 저장할 수 있다.
  • 같은 방식으로 20세기 날짜를 21세기에 저장할 수 있다.
SELECT last_name, hire_date
FROM employees
WHERE hire_date < TO_DATE('2008-02-01', 'YYYY/MM/DD')

 

SYSDATE 함수 

  • SYSDATE 함수는 날짜와 시간을 반환합니다.
  • SYSDATE는 시스템 날짜를 반환하는 날짜 함수이다.
  • SYSDATE는 다른 열 이름을 사용하듯이 사용할 수 있다. 예를 들어, 테이블에서 SYSDATE를 선택하여 시스템 날짜를 표시할 수 있다.
SELECT SYSDATE
FROM DUAL;

 

CURRENT_DATE 및 CURRENT_TIMESTAMP 함수

  • CURRENT_DATE 유저 세션의 현재 날짜를 반환합니다.
  • CURRENT_DATE 는 현재 세션의 시간, SYSDATE는 현재 시스템의 시간을 반환합니다.
SELECT SESSIONTIMEZONE, CURRENT_DATE, SYSDATE, CURRENT_TIMESTAMP
FROM DUAL;
##Asia/Seoul	23/10/08	23/10/08	23/10/08 22:24:02.837954000 ASIA/SEOUL

 

날짜 연산

  • 날짜에 숫자를 더하거나 빼서 결과 날짜 값을구합니다.
  • 두 날짜 사이의 일 수를 알아내기 위해 빼기 연산을 합니다.
  • 시간 수를 24로 나눠 날짜에 시간을 더합니다.  
연산 결과 설명
날짜 + 숫자  날짜 날짜에 일 수를 더합니다. 
날짜 - 숫자 날짜 날짜에서 일 수를 뺍니다.
날짜 - 날짜 일수 한 날짜를 다른 날짜에서 뺍니다.
날짜 + 숫자/24 날짜 날짜에 시간 수를 더합니다.
SELECT last_name, FLOOR((SYSDATE - hire_date)/7) AS WEEKS
FROM employees
WHERE department_id = 90;

 

날짜 조작 함수

함수 사용법 설명
MONTHS_BETWEEN MONTHS_BETWEEN(date1, date2) date1과 date2 사이의 개월 수를 찾는다. 결과는 양수나 음수가 될 수 있습니다.
ADD_MONTHS ADD_MONTHS(date, n) date에 개월 수 n을 추가합니다. n 값은 정수여야 하며 음수가될 수 있습니다. 
NEXT_DAY NEXT_DAY(date, 'char') date 다음에 오는 지정된 요일 ('char')의 날짜를 찾습니다. char값은 요일을 나타내는 숫자나 문자열이 될 수 있습니다.
LAST_DAY LAST_DAY(date) date를 포함하는 달의 말일 날짜를 찾습니다.
ROUND ROUND(date[, 'fmt']) fmt 를 기준으로date를 반올림 합니다. fmt의 기본 값은 DD 입니다. 
TRUNC TRUNC(date[, 'fmt']) fmt 를 기준으로 date를 truncate 합니다.

 

MONTHS_BETWEEN 함수

SELECT MONTHS_BETWEEN('2023/09/03', '2025/09/03')
FROM DUAL;

 

ADD_MONTHS 함수

SELECT ADD_MONTHS('2023/09/03', 3)
FROM DUAL;

 

NEXT_DAY 함수

SELECT NEXT_DAY(TO_DATE('23/09/03', 'RR/MM/DD'), '금요일')
FROM DUAL;

 

LAST_DAY 함수

SELECT LAST_DAY(TO_DATE('23/09/03', 'RR/MM/DD'))
FROM DUAL;

 

ROUND 함수

SELECT ROUND(SYSDATE, 'MONTH')
FROM DUAL;

 

TRUNC 함수

SELECT TRUNC(TO_DATE('23/09/03', 'RR/MM/DD'), 'MONTH') 
FROM DUAl;

'새싹 하이브리드 클라우드 > Database' 카테고리의 다른 글

Oracle 데이터베이스 Use Case  (0) 2023.10.11
Oracle - 변환 함수  (2) 2023.10.09
Oracle - 집합연산자  (1) 2023.10.08
Oracle - Subquery  (0) 2023.10.07
Oracle - DELETE & TRUNCATE  (0) 2023.10.07