Skip to main content

함수

자주 사용되는 SQL 내장 함수 소개 및 활용

  • SQL 내장 함수: DBMS가 기본적으로 제공하는 유용한 기능들로, 데이터 처리 및 분석을 용이하게 함.
  • DBMS별 함수 차이: 표준 SQL 함수 외에 DBMS 제조사마다 고유한 함수나 동일 기능의 다른 함수명을 가질 수 있음. (예: Oracle은 SUBSTR, SYSDATE)

문자열 함수

  • 결합: CONCAT(str1, str2) 또는 str1 || str2 (Oracle)
SELECT COMPANY_NM, CEO_NM, COMPANY_NM || ' (' || CEO_NM || ')' AS "회사명(대표)" FROM TB_COMPANY_MASTER;
  • 부분추출: SUBSTR(str, start_position, length) (Oracle)
SELECT SUBSTR(BIZ_REG_NO, 1, 3) AS "사업자번호 앞3자리" FROM TB_COMPANY_MASTER;
  • 길이: LENGTH(str)
SELECT COMPANY_NM, LENGTH(COMPANY_NM) AS "회사명 길이" FROM TB_COMPANY_MASTER;
  • 대/소문자: UPPER(str), LOWER(str)
SELECT UPPER(COMPANY_ENG_NM) FROM TB_COMPANY_MASTER WHERE COMPANY_ENG_NM IS NOT NULL;
  • 공백제거: TRIM(str), LTRIM(str), RTRIM(str)
    • DUAL은 Oracle의 가상 테이블로, 임시 데이터 조회에 사용
SELECT TRIM('    123    ') FROM dual;
  • 치환: REPLACE(str, search_str, replace_str)
SELECT REPLACE(COMPANY_NM, '(주)', '주식회사 ') FROM TB_COMPANY_MASTER;

숫자 함수

  • ABS: 절댓값
  • ACOS: 역 코사인 함수
  • ASIN: 역 사인 함수
  • ATAN: 역 탄젠트 함수
  • ATAN2: (y, x) 좌표를 받아 각도를 반환
  • CEIL: 올림
  • COS: 코사인
  • COSH: 쌍곡코사인
  • EXP: 지수 함수 EXP(n) = ene^n
  • FLOOR: 내림
  • LN: 자연 로그
  • LOG: 로그 LOG(a,b) = logab\log_a b
  • MOD: 나머지 MOD(a,b) = a-b * FLOOR(a/b)
  • POWER: 거듭제곱 POWER(a,b) = aba^b
  • REMAINDER: 나머지 REMAINDER(a,b) = a-b * ROUND(a/b)
  • ROUND: 반올림
  • SIGN: 음수면 -1, 0이면 0, 양수면 +1
  • SIN: 사인
  • SINH: 쌍곡 사인
  • SQRT: 제곱근
  • TAN: 탄젠트
  • TANH: 쌍곡 탄젠트
  • TRUNC: 특정 자릿수를 자름 TRUNC(15.79) = 15, TRUNC(15.79,1) = 15.7
  • WIDTH_BUCKET: 뒤에서 설명
  • 이자를 0.0에서 10.0까지 5구간으로 나눴을 때 그룹
SELECT INTEREST_RATE, WIDTH_BUCKET(INTEREST_RATE, 0.0, 10.0, 5) AS "분위" 
FROM TB_LOAN_ACCOUNT;

숫자를 문자로 변환하기

SELECT TO_CHAR(LOAN_AMT, 'FM999,999,999,999') as 잔액 FROM TB_LOAN_ACCOUNT;
  • FM이 없으면 앞에 공백이 채워짐
  • 형식의 자릿수가 초과하면(위에서는 1조가 넘으면) ###으로 표시됨
  • 반대로 문자를 숫자로 변환하려면 TO_NUMBER 사용
SELECT TO_NUMBER('123,456', '999,999') AS 숫자 FROM DUAL;

날짜/시간 함수

  • 현재시간: SYSDATE (날짜+시간), CURRENT_DATE (날짜)
SELECT SYSDATE AS "현재시간", CURRENT_DATE AS "현재날짜" FROM DUAL;
  • 부분추출: EXTRACT(YEAR FROM date_col), EXTRACT(MONTH FROM date_col), EXTRACT(DAY FROM date_col)
SELECT ESTABLISH_DT,
EXTRACT(YEAR FROM ESTABLISH_DT) AS "설립년도",
EXTRACT(MONTH FROM ESTABLISH_DT) AS "설립월",
EXTRACT(DAY FROM ESTABLISH_DT) AS "설립일"
FROM TB_COMPANY_MASTER;
  • 형식변환: TO_CHAR(date_col, 'YYYY-MM-DD HH24:MI:SS') (날짜->문자), TO_DATE('string', 'format') (문자->날짜)
SELECT COMPANY_NM, TO_CHAR(ESTABLISH_DT, 'YYYY"년" MM"월" DD"일"') AS "설립일" FROM TB_COMPANY_MASTER;
  • 날짜 연산: 날짜 간 뺄셈 (일수 차이), ADD_MONTHS(date_col, num_months), MONTHS_BETWEEN(date1, date2)
SELECT LOAN_ACCT_NO, MATURITY_DT, ADD_MONTHS(MATURITY_DT, 3) AS "3개월 연장 만기일" FROM TB_LOAN_ACCOUNT;
SELECT LOAN_ACCT_NO, MATURITY_DT, START_DT, MATURITY_DT - START_DT AS "대출기간(일)" FROM TB_LOAN_ACCOUNT;

날짜에 TRUNC

TRUNC 함수를 날짜에 적용하면 뒷자리를 자름

현재 날짜와 시각

SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;

현재 날짜(시각은 0시 0분 0초)

SELECT TO_CHAR(TRUNC(SYSDATE), 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;

이번 달 1월 1일

SELECT TO_CHAR(TRUNC(SYSDATE, 'MM'), 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;

올해 1월 1일

SELECT TO_CHAR(TRUNC(SYSDATE, 'YEAR'), 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;

퀴즈