-
[Oracle] SQL Function 복습코딩공부 2023. 2. 26. 21:01728x90반응형
SQL의 함수에는 단일 행 함수와 그룹 함수로 나눠진다.
- 단일 행 함수
- 각 행마다 반복적으로 적용되어 입력 받은 행의 개수만큼 결과 반환
- 그룹 함수
- 특정 행들의 집합으로 그룹이 형성되어 적용되기 때문에 그룹 당 1개의 결과만 반환
문자 처리 함수
LENGTH, LENGTHB, INSTR, INSTRB 함수는 반환 값이 NUMBER이고 이를 제외한 나머지 함수의 반환 값은CHARACTER형이다.
LENGTH(CHAR / STRING), LENGTHB(CHAR / STRING)
SELECT LENGTH('HELLO'), -- 길이를 반환 (5) LENGTHB('HELLO'), -- 문자열 BYTE로 변환해서 반환 (5) LENGTH('안녕'), -- 길이를 반환 (2) LENGTHB('안녕'), -- BYTE로 반환 (6) LENGTHB('안녕!') -- BYTE로 반환 (7) FROM DUAL;
INSTR(STRING, STR, POSITION)
STRING : 원본
STR : 찾고자 하는 문자열
POSITION : 찾을 위치 시작 값 (DEFAULT : 1)
- POSITION > 0 : 앞에서 부터 찾겠다.
- POSITION < 0 : 뒤에서 부터 찾겠다.
하지만 결과값은 앞에서부터 찾는 위치를 반환한다.
SELECT INSTR('HELLO', 'E', 1), -- 앞에서부터 찾는다 (2) INSTR('HELLO', 'E', -1) -- 뒤에서부터 찾는다 (2) FROM DUAL;
LPAD / RPAD(STRING, N, STR)
STRING : 문자열
N : 총 몇칸을 기준으로 할것인가?
STR : N보다 STRING의 길이가 작다면 그 공간에 뭘 넣을것인가?
SELECT LPAD('-1111-1111', 13, '*'), -- ***-1111-1111 RPAD('010-1111-', 13, '*') -- 010-1111-**** FROM DUAL;
LTRIM / RTRIM(STRING, STR)
STRING : 문자열
STR : 여기에 오는 문자열이 하나라도 존재한다면 지운다. (DEFAULT ' ')
- 예시) 'ABC' 라면 'A','B','C' 이렇게 나눈 다음 일치하는게 있다면 지운다.
- 그렇게 제거하다가 아닌 값이 나오면 함수를 멈춘다.
- 뒤에 일치하는 값이 있어서 더이상 찾지 않는다.
SELECT LTRIM('ABCDEAB', 'ABCD'), -- EAB RTRIM('ABECVBA', 'ABCD') -- ABECV FROM DUAL;
TRIM(LEADING / TRAILING / BOTH STR FROM STRING)
LEADING(앞), TRAILING(뒤), BOTH(양쪽) : 어디서 부터 제거 할껀지 정한다.
- DEFUALT : BOTH
STR : 여기에 오는 문자열이 하나라도 존재한다면 지운다. (DEFUALT ' ')
STRING : 문자열
SELECT TRIM(' T EST '), -- T EST TRIM('X' FROM 'XBOX'), -- BO TRIM(LEADING 'X' FROM 'XBOX'), -- BOX TRIM(TRAILING 'X' FROM 'XBOX'), -- XBO TRIM(BOTH 'X' FROM 'XBOX') -- BO FROM DUAL;
SUBSTR(STRING, START, LENGTH)
STRING : 문자열
START : 어디 위치에서 자를껀지 정하기
- 음수일 경우 뒤에서 부터 위치를 말한다.
LENGTH : START위치 부터 몇개 반환할지
- LENGTH를 정하지 않으면 문자열의 끝까지 반환한다.
SELECT SUBSTR('HELLOWORLD', 6), -- WORLD SUBSTR('HELLOWORLD', 3, 2), -- LL SUBSTR('HELLOWORLD', -5) -- WORLD FROM DUAL;
LOWER / UPPER / INITCAP (STRING)
SELECT LOWER('HELLO WORLD'), -- hello world UPPER('hello world'), -- HELLO WORLD INITCAP('hello world') -- Hello World FROM DUAL;
INITCAP(STRING)의 경우 띄어쓰기를 기준으로 단어의 첫글자만 대문자로 변환해준다.
CONCAT(STRING1, STRING2)
SELECT CONCAT('HELLO', ' WORLD') -- HELLO WOLRD FROM DUAL;
CONCAT함수의 경우는 꼭 지켜하는 규칙이 2개의 문자열만 가능하다는 것이다.
하지만 사용하다 보면 여러개의 문자열을 합쳐야 할때도 있는데 이때는 CONCAT대신 연결연산자(||)를 사용하면 편하다.
SELECT 'HELLO' || ' WORLD' || 'THIS' || ' IS ' || 'ORACLE' -- HELLO WORLD THIS IS ORACLE FROM DUAL;
REPLACE(STRING, OLDSTR, NEWSTR)
SELECT REPLACE('HELLO WORLD', 'HELLO', 'BYE') -- BYE WORLD FROM DUAL;
숫자 처리 함수
ABS(NUMBER)
ABS(NUMBER) 함수의 경우 절대값을 구하는 함수이다.
SELECT ABS(-10), -- 10 ABS(10), -- 10 ABS(-100.111) -- 100.111 FROM DUAL;
MOD(NUMBER, DIVISION)
나머지 값을 구하는 함수이며 자바의 "%" 연산자와 같은 역할을 한다.
SELECT MOD(10,3), -- 1 MOD(-10,3) -- -1 FROM DUAL;
ROUND(NUMBER, STANDARD)
STANDARD까지 반올림하는 함수이다.
- STANDARD의 DEFUALT값은 0이며 0은 정수의 첫째 자리를 의미한다.
SELECT ROUND(10.56), -- 11 ROUND(10.39382, 4), -- 10.3938 ROUND(-10.61, 1), -- -10.6 ROUND(152, -2) -- 200 FROM DUAL;
FLOOR(NUMBER)
소수점을 버린다고 생각한다면 음수의 경우 잘못된 값을 예상할 수 있기때문에 가장 가까운 왼쪽 정수로 간다고 생각하면 편할 수 있다.
- 예시 -4,-3, -2, -1 , 0, 1, 2, 3, 4
- FLOOR(-2.5)의 경우 가장 가까운 왼쪽에 있는 정수는 -3 이다.
SELECT FLOOR(10.11), -- 10 FLOOR(-16.59), -- -17 FLOOR(10.99) -- 10 FROM DUAL;
TRUNC(NUMBER, STANDARD)
STANDARD의 DEFAULT 값은 0이다.
SELECT TRUNC(100.999), -- 100 TRUNC(999.111), -- 999 TRUNC(100.999, 1), -- 100.9 TRUNC(150.999, 2), -- 150.99 TRUNC(155.999, -1) -- 150 FROM DUAL;
CEIL(NUMBER)
값이 있다면 무조건 올림하는 함수
SELECT CEIL(11.01), -- 12 CEIL(10), -- 10 CEIL(-10.11), -- -10 CEIL(10.99) -- 11 FROM DUAL;
날짜 처리 함수
SYSDATE
MONTHS_BETWEEN(DATE, DATE) 함수의 반환 값은 NUMBER타입이고 나머지 함수의 반환 값은 DATE타입이다.
SELECT SYSDATE -- 23/02/26 FROM DUAL
MONTHS_BETWEEN(DATE1, DATE 2)
두 DATE의 차이를 개월 수로 나타낸다.
SELECT MONTHS_BETWEEN(TO_DATE('230226'), TO_DATE('230224')) FROM DUAL;
ADD_MONTHS(DATE, NUMBER)
DATE에 NUMBER만큼 개월이 지난 결과를 보여준다.
SELECT ADD_MONTHS(SYSDATE, 3) -- 23/05/26 FROM DUAL;
NEXT_DAY(DATE, STRING OR NUMBER)
DATE에 가장 가까운 STRING혹은 NUMBER의 DATE를 반환한다.
- NUMBER의 경우 1은 일요일을 의미하게 된다.
SELECT NEXT_DAY(SYSDATE, '월'), -- 23/02/27 NEXT_DAY(SYSDATE, '화요일'), -- 23/02/28 NEXT_DAY(SYSDATE, 1), --23/03/05 NEXT_DAY(SYSDATE, 'MONDAY') -- ERROR FROM DUAL;
오라클의 설정이 한글이라면 한글만 인식이 되고 영어라면 영어만 인식을 할 수 있다.
-- 설정 언어 바꾸는 방법 ALTER SESSION SET NLS_LANGUAGE = AMERICAN; -- 영어로 설정 변경 ALTER SESSION SET NLS_LANGUAGE = KOREA; --- 한글로 설정 변경
LAST_DAY(DATE)
SELECT LAST_DAY(SYSDATE) -- 23/02/28 FROM DUAL;
EXTRACT(YEAR OR MONTH OR DAY FROM DATE)
SELECT EXTRACT(YEAR FROM SYSDATE), -- 2023 EXTRACT(MONTH FROM SYSDATE), -- 2 EXTRACT(DAY FROM SYSDATE) -- 26 FROM DUAL;
형 변환 함수
구분 매개변수 RETURN TO_CHAR DATE OR NUMBER CHAR TO_DATE CHAR OR NUMBER DATE TO_NUMBER CHAR NUMBER TO_CHAR(DATE OR NUMBER, FORMAT)
형식 의미 형식 의미 YYYY 년도 4자리 MON 월 글자 표현 YY 년도 2자리 DAY 요일 MM 월 숫자표현 DY 요일 약어로 표현 SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD'), -- 2023-02-26 TO_CHAR(SYSDATE, 'YY/MON - DAY - DY') -- 23/2월 - 일요일 - 일 FROM DUAL;
형식 의미 L999,999,999 설정 통화로 1000단위로 표시 000,000,000 지정된 크기에서 빈공간을 왼쪽에 0으로 채움 SELECT TO_CHAR(2500000, 'L999,999,999'), -- 2,500,000 TO_CHAR(2500000, '000,000,000') -- 002,500,000 FROM DUAL;
TO_DATE(CHAR OR NUMBER, FORMAT)
SELECT TO_DATE(20220202, 'YYYYMMDD'), -- 22/02/02 TO_DATE(20220202, 'YY/MM/DD'), -- 22/02/02 TO_DATE('20220202', 'YYYY-MM-DD') -- 22/02/02 FROM DUAL;
TO_NUMBER(CHAR, FORMAT)
SELECT TO_NUMBER('1,000,000', '999,999,999') -- 1000000 FROM DUAL;
NULL 처리 함수
NVL(COLUMN, FORMAT)
데이터에 NULL값을 지정한 숫자나 문자로 변경하여 NULL값을 처리해준다.
SELECT NVL(NULL, 0) -- 0 FROM DUAL;
선택 함수
DECODE(Q, IF1, RESULT1, IF2,RESULT2.......DEDAULT)
-- 주민 등록 번호가 있는 테이블이 있다는 가정 SELECT DECODE(SUBSTR(NO,8,1), '1', 'MEN', '2', 'GIRL', 'ALIEN') -- SUBSTR(NO,8,1)의 경우 뒷자리 첫번째 자리이며 -- '1'이면 'MEN' '2'이면 'GIRL' 그외의 값들은 'ALIEN'이 나오게 된다. FROM DUAL;
CASE WHEN ~ THEN ~ ELSE ~ END
SELECT CASE WHEN SUBSTR(NO,8,1) = '1' THEN '남' WHEN SUBSTR(NO,8,1) = '2' THEN '여' WHEN SUBSTR(NO,8,1) = '3' THEN '남' WHEN SUBSTR(NO,8,1) = '4' THEN '여' ELSE 'ALIEN' END AS 'GENDER' FROM DUAL;
728x90반응형'코딩공부' 카테고리의 다른 글
각 화면의 기능을 공통 인터페이스로 분리 (0) 2024.09.21 [AUIGrid] XSS 취약점 발견 및 해결 과정 (0) 2024.09.21 [Javascript] Scope Chain 알아보기 (1) 2022.05.16 [Javascript] Array.reduce 문법 (0) 2022.05.13 Javascript arguments (0) 2022.04.28 - 단일 행 함수