Scalar Functions

밤비나·2023년 4월 21일
0

SQL

목록 보기
12/13

Scalar functions (스칼라 함수)는 하나의 입력값을 받아 결과값을 반환하는 함수이다. 이는 특정 열(컬럼)의 값을 기반으로 새로운 값을 생성하고자 할 때 유용하게 사용된다.

SQL에서 스칼라 함수는 SELECT문의 SELECT절에 사용되거나, WHERE절, GROUP BY절, HAVING절, ORDER BY절에서 사용될 수 있다. 여러 종류의 스칼라 함수가 존재한다.

1. 문자열 함수 (String functions)

문자열 함수는 문자열을 다루는 함수로, 입력 값이 문자열이고 결과 값도 문자열이다.

  • CONCAT: 두 개 이상의 문자열을 합쳐서 하나의 문자열로 반환
  • LENGTH: 문자열의 길이를 반환
  • SUBSTR: 문자열의 일부를 추출
  • LOWER, UPPER: 문자열을 각각 소문자, 대문자로 변환
-- CONCAT: 문자열 연결
SELECT CONCAT('Hello', ' ', 'World'); -- 'Hello World'

-- LENGTH: 문자열 길이
SELECT LENGTH('Hello World'); -- 11

-- LOWER, UPPER: 소문자, 대문자 변환
SELECT LOWER('Hello World'); -- 'hello world'
SELECT UPPER('Hello World'); -- 'HELLO WORLD'

-- TRIM: 문자열 공백 제거
SELECT TRIM('  Hello World   '); -- 'Hello World'

-- SUBSTRING: 문자열 일부 추출
SELECT SUBSTRING('Hello World', 1, 5); -- 'Hello'

-- REPLACE: 문자열 치환
SELECT REPLACE('Hello World', 'Hello', 'Hi'); -- 'Hi World'

-- INSTR: 문자열 내 위치 검색
SELECT INSTR('Hello World', 'o'); -- 5
SELECT INSTR('Hello World', 'o', 6); -- 8

2. 숫자 함수 (Numeric functions)

숫자 함수는 숫자 값을 다루는 함수로, 입력 값이 숫자이고 결과 값도 숫자이다.

  • ROUND: 입력값을 반올림
  • FLOOR, CEILING: 입력값을 내림, 올림
  • ABS: 입력값의 절댓값을 반환
-- ABS: 절댓값 계산
SELECT ABS(-10); -- 10

-- ROUND: 반올림
SELECT ROUND(3.141592, 2); -- 3.14

-- CEIL, FLOOR: 올림, 내림
SELECT CEIL(3.1); -- 4
SELECT FLOOR(3.9); -- 3

-- MOD: 나머지 계산
SELECT MOD(10, 3); -- 1

-- SQRT: 제곱근 계산
SELECT SQRT(16); -- 4

-- POWER: 거듭제곱 계산
SELECT POWER(2, 3); -- 8

3. 날짜 함수 (Date functions)

날짜 함수는 날짜 값을 다루는 함수로, 입력 값이 날짜이고 결과 값도 날짜이다.

  • DATE: 입력값에서 날짜 부분만 추출
  • YEAR, MONTH, DAY: 입력값에서 각각 년도, 월, 일 부분만 추출
  • DATE_ADD, DATE_SUB: 입력된 날짜에 일정 기간을 더하거나 빼서 새로운 날짜를 반환
-- NOW: 현재 시간 반환
SELECT NOW(); -- 2023-04-22 12:34:56

-- CURDATE, CURTIME: 현재 날짜, 시간 반환
SELECT CURDATE(); -- 2023-04-22
SELECT CURTIME(); -- 12:34:56

-- YEAR, MONTH, DAY: 년도, 월, 일 추출
SELECT YEAR('2023-04-22'); -- 2023
SELECT MONTH('2023-04-22'); -- 4
SELECT DAY('2023-04-22'); -- 22

-- DATE_FORMAT: 날짜 포맷 변경
SELECT DATE_FORMAT('2023-04-22', '%Y년 %m월 %d일'); -- 2023년 04월 22일

-- DATE_ADD, DATE_SUB: 날짜 더하기, 빼기
SELECT DATE_ADD('2023-04-22', INTERVAL 1 DAY); -- 2023-04-23
SELECT DATE_SUB('2023-04-22', INTERVAL 1 WEEK); -- 2023-04-15

4. 변환 함수 (Conversion functions)

변환 함수는 데이터 타입을 변환하는 함수로, 입력 값의 데이터 타입이 다르면 결과 값의 데이터 타입도 다르다.

  • CAST: 입력값을 지정된 데이터 타입으로 변환
  • CONVERT: 입력값을 지정된 문자 인코딩 방식으로 변환
-- CAST, CONVERT: 자료형 변환
SELECT CAST('123' AS UNSIGNED); -- 123
SELECT CONVERT('123.45', DECIMAL(5,2)); -- 123.45

-- HEX, UNHEX: 16진수 문자열 변환
SELECT HEX('abc'); -- 616263
SELECT UNHEX('616263'); -- abc

-- BIN, CONV: 2진수 문자열 변환
SELECT BIN(18); -- 10010
SELECT CONV('10010', 2, 10); -- 18

-- ASCII, CHAR: 문자열 <-> ASCII 코드 변환
SELECT ASCII('A'); -- 65
SELECT CHAR(65); -- A

-- 숫자 데이터를 문자열 데이터로 변환
SELECT CONVERT(123, CHAR); -- '123'

-- 문자열 데이터를 다른 문자셋으로 변환
SELECT CONVERT('한글', CHAR CHARACTER SET utf8); -- '한글' (현재 문자셋이 utf8인 경우)

-- 문자열 데이터를 다른 데이터 타입으로 변환
SELECT CONVERT('123.45', DECIMAL(5,2)); -- 123.45

-- 16진수 문자열을 숫자로 변환
SELECT CONVERT('FF', UNSIGNED); -- 255

Scalar function은 각각의 레코드마다 함수를 실행하기 때문에, 대용량의 데이터베이스에서 사용할 경우 성능에 영향을 미칠 수 있다. 따라서 Scalar function을 사용할 때는 함수의 실행 횟수를 최소화하도록 노력해야 한다. 예를 들어, WHERE 절에서 함수를 사용하는 것보다는 SELECT 절에서 계산한 값을 이용하여 WHERE 절에서 필터링하는 것이 더 효율적이다.

-- 컬럼 리스트에서 사용하는 예시
SELECT name, LENGTH(name) as name_length
FROM my_table;

-- WHERE 절에서 사용하는 예시
SELECT *
FROM my_table
WHERE LENGTH(name) > 10;

-- ORDER BY 절에서 사용하는 예시
SELECT name
FROM my_table
ORDER BY LENGTH(name) DESC;

-- GROUP BY와 HAVING 절에서 사용하는 예시
SELECT type, COUNT(*)
FROM my_table
GROUP BY type
HAVING AVG(sales) > 1000;
profile
씨앗 데이터 분석가.

0개의 댓글