함수 Function

2022. 3. 7. 15:26SQL

함수란 특정한 값들을 함수의 괄호 ( ) 안에 입력하면 한 개의 결과가 출력 되는 것이다.

괄호 안에 들어가는 것을 인자(argument)라 한다. 인자는 단일 또는 복수개가 가능하다.

 

단일 행 함수

SQL에서 기본 제공되는 함수를 내장 함수라 한다.

단일 행 함수는 하나의 행을 입력했을 때, 결과가 하나의 행으로 나오는 것이다.

 

DUAL 테이블

오라클 설치시 자동적으로 생성되는 오라클의 표준 테이블이다.

오직 하나의 행에 하나의 칼럼만 가지고 있는 Dummy 테이블이다.

DUAL 테이블은 일시적인 가상테이블로서 숫자 연산, 날짜 연산을 위해서 쓰이는 것이 일반적이다.

 

오라클에서 DUAL 테이블을 이용해서 기본적인 데이터의 연산이 가능하지만 SQL 서버에서는 별도의 테이블 지정 없이 데이터의 연산이 가능하다.

SELECT 10 + 10 FROM DUAL; (ORACLE)

SELECT 10+10; (SQL SERVER)

 

단일행 숫자 함수

ABS(<숫자>) : 절댓값을 구해주는 함수

SIGN(<숫자>) : 음수면 -1, 양수면 1, 0이면 0 출력

FLOOR(<숫자>) : 소수점을 모두 버리는 함수

CEIL(<숫자>) : 소수점을 모두 올리는 함수

# CEILING(<숫자>) : SQL 서버에서 소수점을 모두 올리는 함수

TRUNC(<숫자>,<여기까지 나타낼 소수점 자리수>) : 내림 함수

ROUND(<숫자>,<여기까지 나타낼 소수점 자리수>) : 반올림 함수

MOD(<숫자1>,<숫자2>) : <숫자1>/<숫자2>의 나머지를 구하는 함수

# 자리수 디폴트는 0이다. (소수점 기준 오른쪽은 1, 왼쪽은 -1)

 

단일행 문자형 함수

LOWER(<문자열>) : 대문자를 소문자로 바꾸는 함수

UPPER(<문자열>) : 소문자를 대문자로 바꾸는 함수

INITCAP(<문자열>) : 첫 글자를 대문자로, 나머지를 소문자로 바꾸는 함수

CONCAT(<문자열>,<문자열>) : 두 개의 문자열을 합쳐서 출력해주는 함수

LENGTH(<문자열>) : 문자의 개수를 출력해주는 함수

LENGTHB(<문자열>) : 문자의 바이트를 출력해주는 함수

SUBSTR(<문자열>,<숫자>) : <숫자>번째 글자를 포함하여 이후의 문자열을 출력

SUBSTR(<문자열>,<숫자1>,<숫자2>) : <숫자1>번째 글자를 포함하여 <숫자1>부터 <숫자2>까지의 문자열을 출력

# SQL에서 인덱스 1부터 시작

LPAD(<문자열1>,<숫자>,<문자열2>) : <문자열1> 좌측으로 <문자열2>을 추가하여 결과값이 총 <숫자> 바이트의 문자열을 생성한다.

RPAD(<문자열1>,<숫자>,<문자열2>) : <문자열1> 우측으로 <문자열2>을 추가하여 결과값이 총 <숫자> 바이트의 문자열을 생성한다.

# 총 바이트 수가 되도록 추가하는 문자열을 반복해서 붙인다.

LTRIM(<문자열1>,<문자열2>) : <문자열1> 좌측에서부터 다른 문자가 나올 때까지 <문자열2>를 제거한다.

RTRIM(<문자열1>,<문자열2>) : <문자열1> 우측에서부터 다른 문자가 나올 때까지 <문자열2>를 제거한다.

# 문자열2에 포함된 문자를 제거한다.

 

단일행 날짜 함수

날짜 데이터는 '년/월/일 시:분:초 오후' 형식으로 저장된다.

SELECT SYSDATE FROM DUAL; (ORACLE)

SELECT GETDATE(); (SQL SERVER)

⇒ 현재 날짜 구하기

SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL; (ORACLE)

SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL; (ORACLE)

SELECT EXTRACT(DAY FROM SYSDATE) FROM DUAL; (ORACLE)

SELECT DATEPART(YEAR, GETDATE()); (SQL SERVER)

SELECT DATEPART(MONTH, GETDATE()); (SQL SERVER)

SELECT DATEPART(DAY, GETDATE()); (SQL SERVER)

⇒ 날짜에서 년월일 구하기

SELECT SYSDATE + 10 FROM DUAL; (ORACLE)

SELECT DATEADD(DAY, 10, GETDATE()); (SQL SERVER)

⇒ 날짜 연산 (10일 더하기) 

# SYSDATE 이외에 컬럼명으로도 연산 할 수 있다.

# 날짜 +- 숫자 : 날짜에 숫자만큼의 날짜를 더하거나 뺀다.

# 날짜1 - 날짜2 : 날짜1에서 날짜2를 뺀 일수를 구한다.

 

변환형 함수

데이터들의 데이터 유형을 변경 할 수 있는데 그러한 기능을 하는 함수이다.

 

묵시적 형변환

⇒ 오라클이 자동으로 형 변환을 시켜주는 변환

명시적 형변환

⇒ 수동으로 형 변환을 시켜주는 변환

 

형 변환은 다음과 같은 순서로 이루어진다.

숫자 데이터 ⇒ 문자데이터 ⇒ 날짜 데이터

날짜 데이터 ⇒ 문자데이터 ⇒ 숫자 데이터

 

TO_CHAR(<숫자>) : <숫자>를 문자 데이터로 변환한다.

TO_DATE(<문자열>, <형식>) : <문자열>을 주어진 <형식>에 따른 형태의 날짜 타입으로 변환한다.

TO_CHAR(<날짜>, <형식>) :  <날짜>를 주어진 <형식>에 따른 형태의 문자열 타입으로 변환한다.

TO_NUMBER(<문자열>) : <문자>를 숫자 데이터로 변환한다.

# 바꿀 데이터가 이미 같은 유형이라도 실행된다. 에러 x

 

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

SELECT TO_DATE('2022-03-07 12:30:30 오후', 'YYYY-MM-DD HH:MI:SS PM') FROM DUAL;

# 문자열로 시간을 나타낼 때 12시간제로 나타낸다.

 

SQL SERVER에서 변환형 함수

CAST(<데이터> AS <타입>) : <데이터>를 <타입>으로 변환시킨다.

CONVERT(<타입>, <데이터>) : <데이터>를 <타입>으로 변환시킨다.

 

CASE 함수

<조건식>에 따라 <반환값>이 결정되는 구문이다.

CASE WHEN <조건식1> THEN <반환값1>

        WHEN <조건식2> THEN <반환값2>

        ELSE

END

 

# ELSE 절을 사용하지 않는 경우, 해당 조건에 맞지 않는다면 NULL이 반환된다.

# CASE <칼럼명> WHEN <값> THEN <반환값> 형식으로 쓰일 수 있다.

 

DECODE 함수

DECODE는 CASE 표현식의 하나로서 ORACLE에서만 제공하는 함수이다.

DECODE는 등가조건(=)만 사용 가능하다.

 

DECODE(<칼럼명>, <값1>, <반환값1>, <값2>, <반환값2>)

⇒ 칼럼명이 <값1>이면 <반환값1>, <값2>이면 <반환값2>를 반환

# 칼럼명이 <값1>, <값2> 모두 같지 않는 경우 NULL이 반환된다.

 

 

728x90

'SQL' 카테고리의 다른 글

ORDER BY  (0) 2022.03.08
NULL  (0) 2022.03.08
가상 컬럼 Psudocolumn  (0) 2022.03.07
WHERE문  (0) 2022.03.07
SELECT문  (0) 2022.03.07