반응형
(1) 변환 함수
1. 명시적 형변환과 암시적 형변환
-- 데이터베이스에서 데이터 유형에 대한 형변환을 할 수 있는 방법은 두 가지가 있다.
-- 명시적 형변환 : 변환 함수를 사용하여 데이터 유형을 명시적으로 나타냄
-- 암시적 형변환 : 데이터베이스가 내부적으로 알아서 데이터 유형을 변환함
-- 예를 들어 조건절에서 VARCHAR 유형의 BIRTHDAY 컬럼을 숫자와 비교할 경우
-- 데이터베이스는 오류를 뱉지 않고 내부적으로 BIRRTHDAY 컬럼을 NUMBER형으로 변환하게 된다.
2. 명시적 형변환에 쓰이는 함수
-- SQL SERVER의 경우 CONVERT나 CAST 함수를 사용할 수 있다.
ㄱ. TO_NUMBER(문자열)
-- 문자열을 숫자형으로 변환해주는 함수
SELECT TO_NUMBER('1234') FROM DUAL;
SELECT TO_NUMBER('ABC') FROM DUAL; -- 오류발생
ㄴ. TO_CHAR(수 OR 날짜, [포맷]) *[]은 옵션
-- 수나 날짜형의 데이터를 포맷 형식의 문자형으로 변환해주는 함수
SELECT TO_CHAR(1234) FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'YYYYMMDD HH24MISS') FROM DUAL;
ㄷ. TO_DATE(문자열, 포맷)
-- 포맷 형식의 문자형의 데이터를 날짜형으로 변환해주는 함수이다.
SELECT TO_DATE('20240628', 'YYYYMMDD') FROM DUAL;
(2) NULL 관련 함수
1. NVL(인수1, 인수2)
-- 인수1의 값이 NULL일 경우 인수2를 반환하고 NULL이 아닐 경우 인수1을 반환해주는 함수
-- SQL SERVER의 경우 ISNULL(인수1, 인수2)
SELECT * FROM TB_SAMPLE7;
SELECT MEMBER_NO
,NVL(REVIEW_SCORE, 0) AS REVIEW_SCORE
FROM TB_SAMPLE7;
2. NULLIF(인수1, 인수2)
-- 인수1과 인수2가 같으면 NULL을 반환하고 같지 않으면 인수1을 반환해주는 함수
-- REVIEW_SCORE(컬럼) 데이터가 0일 경우 NULL을 반환하고, 0이 아닐경우 REVIEW_SCORE 값을 반환
SELECT * FROM TB_SAMPLE7;
SELECT MEMBER_NO
,NULLIF(REVIEW_SCORE, 0) AS REVIEW_SCORE
,REVIEW
FROM TB_SAMPLE7
WHERE PRODUCT_ID = '100001';
3. COALESCE(인수1, 인수2, 인수3 ...)
-- NULL이 아닌 최초의 인수를 반환해주는 함수이다.
SELECT * FROM TB_SAMPLE8;
SELECT NAME
,COALESCE(PHONE, EMAIL, FAX) AS CONTACT
FROM TB_SAMPLE8;
4. NVL2(인수1, 인수2, 인수3)
-- 인수1이 NULL이 아닌 경우 인수2를 반환하고 NULL인 경우 인수3을 반환하는 함수
SELECT * FROM TB_SAMPLE7;
SELECT MEMBER_NO
,NVL2(REVIEW, '리뷰있음', '리뷰없음') AS REVIEW_CHECK
FROM TB_SAMPLE7;
(3) CASE
-- CASE는 함수와 성격이 같기는 하지만 표현 방식이 함수라기보다는 구문에 가깝다.
-- 문장으로는 '~이면 ~이고, ~이면 ~이다' 식으로 표현되는 구문
-- 필요에 따라 각 CASE를 여러 개로 늘릴 수도 있다.
-- 같은 기능을 하는 함수로는 ORACLE의 DECODE함수가 있다.
-- 다음 구문은 모든 같은 결과값을 반환한다. *[]은 옵션
SELECT * FROM TB_SAMPLE9;
-- 아래 SQL 코드는 모두 같은 결과를 나타냅니다.
SELECT SUBWAY_LINE,
CASE WHEN SUBWAY_LINE = 1 THEN 'BLUE'
WHEN SUBWAY_LINE = 2 THEN 'GREEN'
WHEN SUBWAY_LINE = 3 THEN 'ORANGE'
ELSE 'GRAY'
END AS LINE_COLOR
FROM TB_SAMPLE9;
SELECT SUBWAY_LINE,
CASE SUBWAY_LINE
WHEN 1 THEN 'BLUE'
WHEN 2 THEN 'GREEN'
WHEN 3 THEN 'ORANGE'
ELSE 'GRAY'
END AS LINE_COLOR
FROM TB_SAMPLE9;
SELECT SUBWAY_LINE,
DECODE(SUBWAY_LINE, 1, 'BLUE', 2, 'GREEN', 3, 'ORANGE', 'GRAY') AS LINE_COLOR
FROM TB_SAMPLE9;
-- TIP) CASE 문에서 ELSE 뒤의 값이 DEFAULT 값이 되고 별도의 ELSE가 없을 경우 NULL이 DEFAULT가 된다.
연습문제) 다음 SQL의 결과는?
SELECT
CASE WHEN COL1 = 'C' THEN SUBSTR(COL2, 2, 1)
WHEN COL1 = '가' THEN 'C'
WHEN COL1 = '1' THEN '10'
ELSE 'B'
END AS RESULT
FROM TB_SAMPLE10;
반응형
'자격증 > SQLD' 카테고리의 다른 글
📘 SQLD 자격증 준비 — SQL 함수 완전 정복! (0) | 2025.05.06 |
---|---|
SQLD 요약정리 (1) (1) | 2024.07.03 |
[SQL]문자함수, 숫자함수, 날짜함수 (0) | 2024.06.28 |
데이터 모델과 SQL (0) | 2023.10.24 |
Part 1) 데이터 모델링의 이해 (1) | 2023.10.23 |