문자열 함수, 숫자형 함수
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;