005. 숫자형 함수 & 내장형 함수

IRISH·2024년 2월 27일
0

Oracle

목록 보기
7/17
post-thumbnail
  • 학습 일자 : 2024.02.27

숫자형 함수

⇒ ABS(N) : 절대값

SELECT  ABS(2.345)  FROM DUAL; -- 2.345
SELECT  ABS(-2.345) FROM DUAL; -- 2.345

⇒ CEIL(N) : 올림

SELECT  CEIL(2.345) FROM DUAL;  -- 3
SELECT  CEIL(-2.345) FROM DUAL; -- -2

⇒ FLOOR(N) : 내림

SELECT  FLOOR(2.345) FROM DUAL;  -- 2
SELECT  FLOOR(-2.345) FROM DUAL; -- -3

⇒ MOD(M,N) : 나머지 반환(n이 0일 경우 m을 반환)

SELECT  MOD(-10, 3) FROM DUAL;  -- -1
SELECT  MOD(-10, -3) FROM DUAL; -- -1
SELECT  MOD(10, 3) FROM DUAL;   -- 1
SELECT  MOD(10, -3) FROM DUAL;  -- 1

⇒ ROUND(n, [m]) : n값의 반올림을 하는 함수로 m은 소숫점 아래 자릿수를 나타냄

  • m은 [음의 정수, 양의 정수, 0] 으로 구분
SELECT ROUND(123.456) FROM DUAL;        -- 123
SELECT ROUND(123.456, 0) FROM DUAL;     -- 123
SELECT ROUND(123.456, 1) FROM DUAL;     -- 123.5
SELECT ROUND(123.456, 2) FROM DUAL;     -- 123.46
SELECT ROUND(123.456, -1) FROM DUAL;    -- 120

⇒ TRUNC(n, m) : n값을 절삭하는 함수로 m은 소숫점 아래 자릿수를 나타냄

  • m은 [음의 정수, 양의 정수, 0] 으로 구분
SELECT  TRUNC(123.456, 1) FROM DUAL;    -- 123.4
SELECT  TRUNC(123.456, -2) FROM DUAL;   -- 100

문자형 함수

⇒ CONCAT(char1, char2) : Concatenation의 약자로 두 문자를 결합하는 역할을 하며, "||" 연산자와 같은 역할 수행

SELECT CONCAT('www.', 'irish')||'.com' name FROM DUAL; 
-- > 결과 : www.irish.com

⇒ INITCAP(char), LOWER(char), UPPER(char)

  • INITCAP : 주어진 문자열의 첫 번째 문자를 대문자로 변환시켜 줌
  • LOWER : 주어진 문자열을 소문자로 변환시켜 줌
  • UPPER : 주어진 문자열을 대문자로 변환시켜 줌
SELECT INITCAP('irish') name FROM DUAL
 UNION ALL
SELECT UPPER('irish') name FROM DUAL
 UNION ALL
SELECT LOWER('irish') name FROM DUAL;
-- > 결과
--Irish
--IRISH
--irish

⇒ LPAD(char1, n [,char2]), RPAD(char1, n [,char2])

  • LPAD : 왼쪽에 문자열을 끼어 놓는 역할을 함
  • RPAD : 오른쪽에 문자열을 끼어 놓는 역할을 함
  • n은 반환되는 문자열의 전체 길이를 나타내며, char1의 문자열이 n보다 클 경우 char1을 n개 문자열 만큼 반환
SELECT LPAD('irishclub', 12, '*') name FROM DUAL
 UNION ALL
SELECT RPAD('irishclub', 12, '*') name FROM DUAL;
-- > 결과
--***irishclub
--irishclub***

⇒ SUBSTR(char, m ,[n]), SUBSTRB(char, m ,[n])

  • SUBSTR 함수는 m 번째 자리부터 길이가 n개인 문자열을 반환
  • m이 음수일 경우에는 뒤에서 m 번째 문자부터 n개의 문자를 반환
  • SUBSTRB 함수에서 B는 Byte단위로 처리하겠다는 의미
-- 세번째 이후 문자열 반환.
SELECT SUBSTR('irishclub', 3) name FROM DUAL;
-- > 결과 : ishclub

-- 세번째 이후 네개의 문자열 반환.
SELECT SUBSTR('irishclub', 3, 4) name FROM DUAL;
-- > 결과: ishc

-- 뒤에서 세번째 이후 두개의 문자열 반환.
SELECT SUBSTR('irishclub', -3, 2) name FROM DUAL;
-- > 결과 : lu

-- DB가 UTF-8인 경우 아래 SQL의 결과는?.
SELECT SUBSTRB('아이리쉬클럽',1) name FROM DUAL
 UNION ALL
SELECT SUBSTRB('아이리쉬클럽',3) name FROM DUAL;
-- > 결과
--아이리쉬클럽
--  이리쉬클럽

⇒ LENGTH(char), LENGTHB(char)

  • 문자열의 길이를 반환
SELECT LENGTH('아이리쉬클럽') len FROM DUAL
 UNION ALL
SELECT LENGTHB('아이리쉬클럽') len FROM DUAL;
-- > 결과
--6
--18

⇒ REPLACE(char1, str1, str2) : REPLACE는 문자열의 특정 문자를 다른 문자로 변환

SELECT REPLACE('irishclub','irish','db') name FROM DUAL;
-- > 결과
-- dbclub

-- 대소문자를 구분한다는 것을 알수 있다.
SELECT REPLACE('irishClub','irish','DB') name  FROM DUAL
 UNION ALL
SELECT REPLACE('irishClub','Irish','DB') name  FROM DUAL;
-- > 결과
--DBClub
--irishClub

⇒ INSTR (char1, str1, m, n) : 문자열이 포함되어 있는지를 조사하여 문자열의 위치를 반환. 지정한 문자열이 발견되지 않으면 0이 반환

SELECT INSTR('CORPORATE FLOOR','OK') idx FROM DUAL;
-- > 결과 : 0

-- OR이 있는 위치 2를 반환. 왼쪽부터 비교를 한다는 것을 알 수 있다.
SELECT INSTR('CORPORATE FLOOR','OR') idx FROM DUAL;
-- > 결과 : 2

-- 왼쪽에서 세 번째부터 시작을 해서 검색된 OR의 위치를 반환 한다.
SELECT INSTR('CORPORATE FLOOR','OR', 3) idx FROM DUAL;
-- > 결과 : 5

-- 왼쪽에서 세 번째부터 시작을 해서 비교를 하여 OR이 두 번째 검색되는 지점의 위치를 반환 한다.
SELECT INSTR('CORPORATE FLOOR','OR', 3, 2) idx FROM DUAL;
-- > 결과 : 14

⇒ TRIM (char1[,char2]), LTRIM (char1[,char2]), RTRIM (char1[,char2])

  • TRIM : 특정한 문자를 제거 한다. 제거할 문자를 입력하지 않으면 기본적으로 공백이 제거됨
  • LTRIM : 왼쪽부터 문자를 제거 한다. 제거할 문자를 입력하지 않으면 기본적으로 왼쪽 공백이 제거됨
  • RTRIM : 오른쪽부터 문자를 제거 한다. 제거할 문자를 입력하지 않으면 기본적으로 오른쪽 공백이 제거됨
SELECT TRIM('i' FROM 'irishclub') name FROM DUAL
UNION ALL
SELECT TRIM(' irishclub ') name FROM DUAL;
-- > 결과
--rishclub
--irishclub

-- 왼쪽의 문자열을 TRIM하는 예제이다. 
-- 공백의 경우 왼쪽 공백만 제거 되는 것을 확인 할 수 있다.
SELECT LTRIM('irishclub','irish') name FROM DUAL
UNION ALL
SELECT REPLACE(LTRIM(' irishclub '),' ','*') name FROM DUAL;
-- > 결과
--club
--irishclub*

-- 오른쪽의 문자열을 TRIM 하는 예제이다. 
-- 공백의 경우 오른쪽 공백만 제거 되는 것을 확인 할 수 있다.
SELECT RTRIM('irishclub','club') name FROM DUAL
UNION ALL
SELECT REPLACE(RTRIM(' irishclub '),' ','*') name FROM DUAL;
-- > 결과
--irish
--*irishclub

느낀점

숫자형 함수와 같은 경우 어려운 개념들은 아니지만, 아직 실무에서는 크게 사용하고 있지는 않다. 내가 참여하고 있는 프로젝트에서는 숫자보다는 문자로 더 많은 일을 처리하기 때문이다. 하지만, 언제 떻게 숫자를 처리할 지 모르는 것보다는 괜찮다고 생각한다. 그래도, 숫자형 함수에서 인상 깊었던 함수는 절삭과 관련된 TRUNC 함수였다.

반면, 문자형 함수와 같은 경우는 실무에서 많이 사용하기 때문에 CONCAT, LOWER, UPPER, LPAD, RPAD, SUBSTR, LENGTH, REPLACE는 경험해봤다. 반면, 이번 공부를 하면서 처음 보는 것들도 있었다. INSTR, INTICAP이 여기에 해당한다. INSTR과 같은 경우는 글쎄… 왠지 나중에도 잘 안쓸 것 같기는 하다. 반면, LOWER이나 UPPER을 빈번히 사용하는 이상 INTICAP과 같은 경우는 잘 사용할 것 같다.

전반적으로 숫자형 함수와 문자형 함수에 대해서 학습했다. 실무에서 사용하던 것을 만나 반갑기도 하고, 또 새로 보는 것들도 많아 아직 해야할 것이 많이 남아있다는 생각도 든다.

profile
#Software Engineer #IRISH

0개의 댓글

관련 채용 정보