SQLD, D-13 내장함수

야아니·2025년 11월 3일

SQLD

목록 보기
4/11
post-thumbnail

🖥️ ROUND, CEIL, FLOOR, SIGN 등 내장함수

아래는 숫자/날짜 반올림·절삭 관련 함수들의 사용법, 동작 특징(음수 처리 포함), 예제와 실무 팁을 간결하게 정리한 내용입니다.


1️⃣ROUND (숫자)

용도: 소수점/자리수 단위로 반올림.

문법:

ROUND(number, n)    -- n: 소수 자리수(생략 시 0)

동작

  • n > 0 : 소수점 이하 n자리로 반올림.
  • n = 0 또는 생략 : 정수로 반올림.
  • n < 0 : 소수점 왼쪽(10의 자리, 100의 자리 등)에서 반올림.

예제

SELECT ROUND(123.456, 2)   -- 123.46
SELECT ROUND(123.456, 0)   -- 123
SELECT ROUND(123.456, -1)  -- 120

주의: 소수점이 정확히 .5인 경우의 처리(올림 규칙: 반올림 방식)는 DBMS별로 세부 동작이 다를 수 있으니(예: 반올림-짝수 vs 항상 올림 등) 사용 중인 DB 문서 확인 권장.


2️⃣ROUND (날짜) — Oracle 스타일

용도: 날짜를 월/년 등 단위로 반올림(가까운 단위로 올림/내림).

문법

ROUND(date_expr, 'fmt')  -- fmt: 'YEAR'|'YYYY'|'MONTH'|'MM'|'DD' 등

예제 (Oracle)

SELECT ROUND(TO_DATE('15-06-2025','DD-MM-YYYY'), 'MONTH')  -- 01-JUL-2025 (6월 15일 → 다음 달 시작으로 반올림)
SELECT ROUND(TO_DATE('10-10-2025','DD-MM-YYYY'), 'YEAR')   -- 01-JAN-2026 (10월 → 다음 해)

비교:
TRUNC(date, 'fmt')는 내림(잘라냄):
예) TRUNC('15-JUN-2025','MONTH') → 01-JUN-2025


3️⃣TRUNC (숫자)

용도: 반올림 대신 절삭(버림). 소수점 또는 자리수 단위로 자름.

문법

TRUNC(number, n)

동작

  • n > 0 : 소수점 이하 n자리까지 자름.
  • n = 0 또는 생략 : 정수 부분만 남김(소수 버림).
  • n < 0 : 왼쪽 자리 단위로 자름(10의 자리 등).

예제

SELECT TRUNC(123.456, 2)   -- 123.45
SELECT TRUNC(123.456, 0)   -- 123
SELECT TRUNC(123.456, -1)  -- 120

4️⃣CEIL / FLOOR

용도: 소수값을 올림/내림하여 정수(또는 지정 자리)로 맞춤.

문법

CEIL(number)   -- 주어진 값보다 크거나 같은 최소 정수
FLOOR(number)  -- 주어진 값보다 작거나 같은 최대 정수

예제

SELECT CEIL(2.1)   -- 3
SELECT FLOOR(2.9)  -- 2
SELECT CEIL(-2.1)  -- -2   (음수에서 CEIL은 값보다 크거나 같은 정수) 
SELECT FLOOR(-2.1) -- -3   (음수에서 FLOOR은 값보다 작거나 같은 정수)

: 특정 자리(예: 소수 첫째 자리 기준 올림)으로 하고 싶으면
CEIL(number * 10) / 10 형태로 변형 가능.


5️⃣SIGN

용도: 숫자의 부호 판별(양/영/0).

문법

SIGN(number)   -- 결과: 1 (양수), 0 (0), -1 (음수)

예제

SELECT SIGN(100)   -- 1
SELECT SIGN(0)     -- 0
SELECT SIGN(-23)   -- -1

사용처: 값의 부호에 따른 분기, 정규화(예: SIGN(x) * LOG(ABS(x)) 등) 등에 유용.


6️⃣MOD (나머지)

용도: 정수/숫자 나머지 계산.

문법

MOD(x, y)

예제

SELECT MOD(10, 3)   -- 1
SELECT MOD(25, 5)   -- 0

주의: 음수 처리 방식은 DBMS/정의(수학적 표현식)에 따라 달라질 수 있음.
(예: MOD(-10,3) 결과가 DBMS마다 다를 수 있으니 필요 시 테스트 권장)


7️⃣관련 유틸 함수 (간단하게)

  • ABS(x) : 절댓값
  • POWER(x, y) / x^y : 거듭제곱
  • SQRT(x) : 제곱근
  • TRUNCATE() : MySQL 등에서 소수 자르기(명칭 차이)
  • 날짜 관련: TRUNC(date, fmt)(절삭), ROUND(date, fmt)(반올림) — DBMS별 포맷 문자열 차이 존재

🧩 틀린 문제 문법 정리

SELECT TO_CHAR(TO_DATE(SUBSTR(JUMIN, 1, 6), 'RRMMDD'), 'YYYY-MM-DD') FROM TAB1;

📈 SUBSTR, RRMMDD, YYYY-MM-DD 포맷 정리

  1. SUBSTR(문자열, 시작, 길이)
  • 문자열에서 일부를 추출할 때 사용
  • 시작은 1부터 시작
  • 길이만큼 잘라서 반환

예시:

JUMIN = '7510231111111'
SUBSTR(JUMIN, 1, 6) → '751023'  (앞 6자리 추출)
  1. RRMMDD 포맷
  • TO_DATE에서 사용하는 날짜 포맷

  • 앞 2자리 연도(RR)를 기준으로 1900년대/2000년대 자동 변환

    • 00~49 → 2000년대
    • 50~99 → 1900년대
  • 뒤 4자리는 월(MM)과 일(DD)

예시:

TO_DATE('751023', 'RRMMDD') → 1975년 10월 23일
  1. YYYY-MM-DD 포맷
  • TO_CHAR에서 사용하는 날짜 출력 포맷
  • 연도 4자리, 월 2자리, 일 2자리
  • 주로 화면 표시용으로 사용

예시:

TO_CHAR(TO_DATE('751023','RRMMDD'), 'YYYY-MM-DD') → '1975-10-23'

🧩 내장함수 사용 범위 정리

함수/키워드SELECTWHEREGROUP BYHAVINGORDER BY설명
DISTINCT선택 컬럼 중복 제거. SELECT 절에서만 사용 가능
ROUND(n, d)숫자 반올림
CEIL(n)숫자 올림
FLOOR(n)숫자 내림
SIGN(n)양수/음수/0 반환
profile
세계평화를 원하는 사람입니다.

0개의 댓글