SQL

문자열 함수, 숫자형 함수

Chan Dev 2024. 12. 5. 10:32
SQL 에는 다양한 함수를 지원합니다.

 

SQL 에서는 다양한 함수를 지원합니다.

SQL 에서 지원하는 함수 중에는 문자열 함수, 숫자 함수, 날짜 함수, 변환 함수, NULL 관련 함수, 집계 함수가 있습니다.

SQL 을 다루다 보면 이러한 함수들이 얼마나 유용한지, 쿼리문을 보다 이해하기 쉽게 만들고 효율적으로 실행할 수 있게 도와주는지 경험하실 수 있습니다.

 

문자열 함수

문자 데이터를 처리하기 위해 사용되는 SQL 함수를 문자 함수라고 합니다.

 

CONCAT

CONCAT 함수는 2개 혹은 그 이상의 문자열을 1개의 문자열로 합칠 때 사용합니다.

CONCAT(문자열, 문자열, ...)

 

예를 들어 우리가 patient 라는 테이블이 있다고 가정해 봅시다.

해당 테이블에는 환자의 숫자 아이디, 이름, 입원날짜, 환자가 앓고 있는 병에 관한 정보가 저장되어 있습니다.

우리는 이런 환자의 데이터를 읽기 좋게 만들어서 보여주고 싶습니다.

SELECT
 CONCAT(name, ' was admitted to St. Ann's Hospital on ', date, ' with ', illness)
FROM patient
WHERE patient_id = 447;
John Doe was admitted to St. Ann's Hospital on 2021-01-14 with flu.

 

만약 아래와 같은 테이블이 있을때 type 에 따라 name 을 정렬하고 싶다면 아래와 같이 해주시면 됩니다.

SELECT CONCAT(type, '::', name) AS hero_name FROM hero_collection;

 

REPLACE

해당 함수는 기존의 문자열을 다른 문자열로 대체하고 싶을 때 사용합니다.

만약 수정할 문자열이 NULL 값이라면, 이는 값이 존재하지 않는다는 의미이기 때문에 기존 문자열은 삭제된 상태로 반환됩니다.

REPLACE(문자열 or 열 이름, '바꾸려는 문자열', '바뀔 문자열' )

 

Rgistry 테이블에서 Chan Young 이라는 이름을 가진 직원의 이름을 Chan Kim 이라고 바꾸고 싶다면 REPLACE 함수를 사용하여 손쉽게 변경하실 수 있습니다.

UPDATE registry SET name = REPLACE(name, 'Young', 'Kim') WHERE name LIKE 'Chan%';

 

SUBSTR

SUBSTR 함수는 문자열에서 일정 부분의 문자열을 추출해 내는 함수입니다.

괄호 안의 첫 번째에는 우리가 조작하고자 하는 문자열이나 해당 문자열이 저장되어 있는 열 이름을 적어주면 됩니다.

그러고 난 후, 어디서부터 문자를 추출할 것인지 그리고 그곳을 기준으로 총 몇개의 알파벳을 추출할 것인지 적습니다.

SUBSTR(문자열, 시작위치, 길이)

 

 

위에 이미지처럼 상품 아이디의 문자열과 숫자열 사이에 언더바(_) 를 넣고 싶을 때 CONCAT, SUBSTR 함수를 함께 사용하면 해결할 수 있습니다.

UPDATE products SET id = CONCAT(SUBSTR(id,1,2), '_', SUBSTR(id,3))

 

TRIM

보통 TRIM 함수는 공백을 제거할 때 사용합니다.

TRIM 은 '다음다' 라는 뜻으로, 문자를 다음어준다고 생각하시면 됩니다.

 

SQL 문장에서의 표현 기능
TRIM 문자열의 양 끝 공백을 모두 제거
LTRIM 문자열 왼쪽 공백만 제거
RTRIM 문자열 오른쪽 공백만 제거

 

SELECT TRIM(문자열) FROM DUAL;

 

예를 들어 HELLO 라는 문자열의 양 공백을 지우거나 오른쪽, 왼쪽만 지우고 싶다면 TRIM 을 쓰시면 됩니다.

SELECT TRIM('  HELLO  ') FROM DUAL;
SELECT RTRIM('  HELLO  ') FROM DUAL;
SELECT LTRIM('  HELLO  ') FROM DUAL;

 

숫자함수

숫자 함수는 숫자 데이터를 처리하거나 변환하는 데 사용됩니다.

이 함수들은 데이터베이스에서 숫자 계산, 변환, 조건 적용 등에 자주 활용됩니다.

 

ABS

절대값을 반환합니다.

SELECT ABS(-15) AS absolute_value; -- 결과: 15

 

ROUND

숫자를 반올림합니다.

소수 자릿수를 지정할 수도 있습니다.

SELECT ROUND(123.456, 2) AS rounded_value; -- 결과: 123.46
SELECT ROUND(123.456) AS rounded_value;    -- 결과: 123

 

CEIL , CEILING

올림하여 가장 가까운 정수를 반환합니다.

SELECT CEIL(123.45) AS ceiling_value; -- 결과: 124
SELECT CEIL(-123.45) AS ceiling_value; -- 결과: -123

 

FLOOR

내림하여 가장 가까운 정수를 반환합니다.

SELECT FLOOR(123.45) AS floor_value; -- 결과: 123
SELECT FLOOR(-123.45) AS floor_value; -- 결과: -124

 

MOD

나머지를 반환합니다.

SELECT MOD(10, 3) AS remainder; -- 결과: 1
SELECT MOD(-10, 3) AS remainder; -- 결과: -1

 

POWER

거듭제곱 결과를 반환합니다.

SELECT POWER(2, 3) AS power_result; -- 결과: 8 (2의 3제곱)

 

SQRT

제곱근을 반환합니다.

SELECT SQRT(16) AS square_root; -- 결과: 4
SELECT SQRT(2) AS square_root;  -- 결과: 1.4142135...

 

TRUNC

숫자를 소수점 이하로 잘라냅니다.

SELECT TRUNC(123.456, 2) AS truncated_value; -- 결과: 123.45
SELECT TRUNC(123.456) AS truncated_value;    -- 결과: 123

 

응용 예제

학생 점수 테이블에서 반올림하여 총점을 계산하는 예제 입니다.

CREATE TABLE students (
    id INT,
    name VARCHAR(50),
    math_score DECIMAL(5, 2),
    science_score DECIMAL(5, 2)
);

INSERT INTO students VALUES (1, 'Alice', 89.5, 94.2), 
                            (2, 'Bob', 76.3, 85.4);

SELECT 
    name,
    ROUND(math_score + science_score, 1) AS total_score
FROM students;