일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 금리인하
- XLF
- 접근제어자
- 그리디 알고리즘
- 백준
- 프로그래머스
- 배당성장
- 미국주식
- 잉여현금흐름
- S&P500
- 다형성
- 기업분석
- mco
- 무디스
- 인플레이션
- 오버라이딩
- 금리인상
- StringBuffer
- javascript
- 주린이
- Java
- object
- etf
- 객체지향
- 알고리즘
- 제태크
- 현금흐름표
- 자바
- 주식
- FCF
- Today
- Total
오늘의하루
[Oracle] SQL Function 복습 본문
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;
'코딩공부' 카테고리의 다른 글
각 화면의 기능을 공통 인터페이스로 분리 (0) | 2024.09.21 |
---|---|
[AUIGrid] XSS 취약점 발견 및 해결 과정 (0) | 2024.09.21 |
[Javascript] Scope Chain 알아보기 (0) | 2022.05.16 |
[Javascript] Array.reduce 문법 (0) | 2022.05.13 |
Javascript arguments (0) | 2022.04.28 |