[SQLD] 함수 FUNCTION

younghyun·2023년 6월 7일
0

SQLD

목록 보기
4/18

내장함수 BUILT IN FUNCTION

: 단일행 함수와 다중행 함수로 나뉜다.

단일행 함수

처리하는 데이터 형식에 따라서 문자형, 숫자형, 날짜형, 변환형, NULL 관련 함수

[42] 날짜형 함수

SELECT TO_CHAR(TO_DATE('2015.01.10.10', 'YYY.MM.DD HH24) + 1/24/(60/10), 
               'YYYY.MM.DD HH24:MI:SS') FROM DUAL;

오라클에서 날짜의 연산은 숫자의 연산과 같다.
1/24/60 = 1분
2015년 1월 10일 10시 + 10분 = 2015년 1월 10일 10시 10분

DUAL 테이블이란
SELECT~ FROM~ 의 형식을 갖추기 위한 일종의 DUMMY 테이블이다.
DUMMY 라는 문자열 유형의 컬럼에 X라는 값이 들어 있는 행을 1건 포함하고 있다.

CONCAT(문자열1, 문자열2) = 문자열1과 문자열 2를 연결

날짜형 함수

// Oracle 함수
EXTRACT(YEAR FROM HIREDATE) 
TO_NUMBER(TO_CHAR(HIREDATE,'YYYY'))
// SQL Server 함수
DATEPART(YEAR, HIREDATE)
YEAR(HIREDATE)

Oracle과 SQL의 차이

// Oracle 함수
SELECT EXTRACT(YEAR FROM HIREDATE) 입사년, 
       EXTRACT(MONTH FROM HIREDATE) 입사월, 
       EXTRACT(DAY FROM HIREDATE) 입사일 
FROM EMP;

// Oracle 함수
SELECT ENAME, HIREDATE, TO_NUMBER(TO_CHAR(HIREDATE,'YYYY')) 입사년도, 
  TO_NUMBER(TO_CHAR(HIREDATE,'MM')) 입사월, 
  TO_NUMBER(TO_CHAR(HIREDATE,'DD')) 입사일 
 FROM EMP; 

// SQL Server 함수
SELECT ENAME, HIREDATE, DATEPART(YEAR, HIREDATE) 입사년도, 
       DATEPART(MONTH, HIREDATE) 입사월, 
       DATEPART(DAY, HIREDATE) 입사일
FROM EMP;

// SQL Server 함수 
SELECT ENAME, HIREDATE, YEAR(HIREDATE) 입사년도, 
       MONTH(HIREDATE) 입사월,
       DAY(HIREDATE) 입사일 
FROM EMP;

CASE 표현

SIMPLE_CASE_EXPRESSION

CASE 
   SIMPLE_CASE_EXPRESSION 조건
   ELSE 표현절
END

SEARCHED_CASE_EXPRESSION
: CASE 다음에 칼럼이나 표현식 없음

CASE 
   SEARCHED_CASE_EXPRESSION 조건
   ELSE 표현절 
END

[43번] CASE 표현

SIMPLE_CASE_EXPRESSION

SELECT LOC, CASE LOC 
            WHEN 'NEW YORK' THEN 'EAST' 
            ELSE 'ETC' END as AREA 
FROM DEPT;

SEARCHED_CASE_EXPRESSION

SELECT LOC, 
   CASE WHEN LOC =  'NEW YORK' THEN 'EAST' 
   ELSE 'ETC' 
   END as AREA 
FROM DEPT;

[55번] ORDER BY에 CASE 표현 중첩

// ID가 999이면 0으로 치환된다.
// 따라서 가장 먼저 정렬하고 나머지는 ID값으로 정렬한다.
ORDER BY (CASE WHEN ID = 999 THEN 0 ELSE ID END)

[58번] ORDER BY에 CASE 표현 중첩

// ID가 A이면 1로 치환되어 가장 먼저 정렬한다.
// 나머지 ID는 AMT값으로 내림차순 정렬한다.
SELECT ID, AMT
FROM TBL
ORDER BY (CASE WHEN ID = 'A' THEN 1 ELSE 2 END),
         AMT DESC

NVL/ISNULL 함수

// Oracle 함수  vs  SQL Server 함수
// 표현식1이 NULL이면 표현식2 출력
NVL(표현식1, 표현식2)  
ISNULL(표현식1, 표현식2)  

// 표현식1 = 표현식2이면 NULL, 아니면 표현식1
NULLIF(표현식1, 표현식2) 

// NULL이 아닌 최초의 표현식
COALESCE(표현식1, 표현식2, ...) 

NULL과 공집합

공집합과 NULL은 다르다.
NULL은 아직 정의되지 않은 값으로, 0(숫자) 또는 공백(문자)과 다르다.

  • 공집합을 가진 컬럼은 "데이터를 찾을 수 없다"
  • NULL을 가진 컬럼은 존재한다.
profile
🌱 주니어 백엔드 개발자입니당

0개의 댓글