[MySQL] MySQL 함수 모음

코린이·2025년 6월 12일

MySQL

목록 보기
19/23

✅ 문자 함수

📌 문자 합치기 _ CONCAT()

SELECT CONCAT(<컬럼1>, <컬럼2>)
SELECT CONCAT('안녕', '하세요')   -- 안녕하세요

-- 함수에 인자값으로 NULL이 들어가면 NULL 반환
SELECT CONCAT(<컬럼1>, NULL, ...<컬럼n>)   -- NULL 반환

📌 문자 합치기 _ CONCAT_WS()

미리 구분자를 정의하여 문자 합치기

SELECT CONCAT_WS('!', '안녕', '하세요','반갑습니다.')  -- 안녕!하세요!반갑습니다.

-- 함수 인자값으로 NULL이 들어오면 NULL을 무시하고 문자를 합친다.
SELECT CONCAT_WS('!', '안녕', NULL,'반갑습니다.')  -- 안녕!반갑습니다.

대문자 변환 _ UPPER()

모든 문자(영어)를 대문자로 변환

SELECT UPPER('Hello')	-- HELLO

📌 대문자 변환 _ LOWER()

모든 문자(영어)를 소문자로 변환

SELECT LOWER('Hello')	-- hello

📌 문자 양쪽 공백 제거 _ TRIM()

SELECT TRIM('     안녕 하세요 반갑습니다.    ')     -- 안녕 하세요 반갑습니다.

📌 문자 왼쪽 공백 제거 _ LTRIM()

SELECT TRIM('     안녕 하세요 반갑습니다.')     -- 안녕 하세요 반갑습니다.

📌 문자 오른쪽 공백 제거 _ RTRIM()

SELECT TRIM('안녕 하세요 반갑습니다.      ')    -- 안녕 하세요 반갑습니다.

📌 문자 크기 반환 _ LENGTH()

문자 길이X
문자 크기O (바이트 단위로 반환)

SELECT LENGTH('안녕 하세요 반갑습니다.')    -- 33

📌 문자 길이 반환 _ CHAR_LENGTH()

문자 길이O (공백까지 길이 계산)
문자 크기X

SELECT CHAR_LENGTH('안녕 하세요 반갑습니다.')    -- 13

📌 특정 문자 위치 길이 반환 _ POSITION()

문자 길이O (공백까지 길이 계산)
특정 문자가 처음 시작하는 위치(길이) 반환
만약 특정 문자가 없을 경우 0 반환

SELECT POSITION('!' IN '안녕! 하세요! 반갑습니다.')    -- 3
SELECT POSITION('@' IN '안녕! 하세요! 반갑습니다.')    -- 0

📌 지정 길이만큼 왼쪽 문자 반환 _ LEFT()

SELECT LEFT('안녕! 하세요! 반갑습니다.', 6)    -- 안녕! 하세

📌 지정 길이만큼 오른쪽 문자 반환 _ RIGHT()

SELECT RIGHT('안녕! 하세요! 반갑습니다.', 6)    -- 반갑습니다.

📌 지정 길이만큼 문자 반환 _ SUBSTRING()

SELECT SUBSTRING('안녕! 하세요! 반갑습니다.', 3)       -- ! 하세요! 반갑습니다.

SELECT SUBSTRING('안녕! 하세요! 반갑습니다.', 3, 7)    -- ! 하세요! 반

📌 특정 문자로 문자 변환 _ REPLACE()

SELECT REPLACE('안녕 하세요.','안녕','감사')   -- 감사 하세요.

📌 특정 문자 반복 _ REPEAT()

SELECT REPEAT('안녕!', 4)   -- 안녕!안녕!안녕!안녕!

📌 공백 삽입 _ SPACE()

SPACE(5) : 공백 5칸

SELECT CONCAT('안녕',SPACE(5),'하세요')   -- 안녕     하세요

📌 문자 역순 출력 _ REVERSE()

SELECT REVERSE('안녕하세요')   -- 요세하녕안

📌 문자 비교(동일 비교) _ STRCMP()

두 문자가 동일하면 0, 틀리면 -1

SELECT STRCMP('안녕', '안녕')    -- 0
SELECT STRCMP('안녕', '하세요')   -- -1

✅ NULL 관련 함수

📌 NULL값 변환 _ IFNULL()

SELECT IFNULL(<컬럼>, <컬럼/대체값>)

📌 NULL값 변환 _ COALESCE()

컬럼값이 계속해서 NULL인 경우 다음 대체값으로 이동.

SELECT COALESCE(<컬럼>, <컬럼/대체값1>, <컬럼/대체값2>, <컬럼/대체값3>...)

✅ 날짜 관련 함수

📌 현재 날짜/시간 조회 _ NOW()

SELECT NOW() -- 2025-06-14 16:06:37

-- 함수에 인자(1~6)를 추가하여 정밀한 시간을 조회할 수 있다.
SELECT NOW(6) -- 2025-06-14 16:08:35.985296

📌 날짜 더하기 _ DATA_ADD()


SELECT DATE_ADD(<날짜값>, INTERVAL <계산값> <계산 대상>)

SELECT NOW()							    -- 2025-06-14 16:13:21
SELECT DATE_ADD(NOW(), INTERVAL 1 MONTH)    -- 2025-07-14 16:13:21
SELECT DATE_ADD(NOW(), INTERVAL -1 MONTH)   -- 2025-05-14 16:13:21

📌 날짜 빼기 _ DATA_SUB()


SELECT DATE_ADD(<날짜값>, INTERVAL <계산값> <계산 대상>)

SELECT NOW();							    -- 2025-06-14 16:13:21
SELECT DATE_SUB(NOW(), INTERVAL 1 MONTH);    -- 2025-05-14 16:13:21
SELECT DATE_SUB(NOW(), INTERVAL -1 MONTH);   -- 2025-07-14 16:13:21

📌 날짜 차이 계산(일수 반환) _ DATEDIFF()

SELECT DATEDIFF('20250625', '20250316');   	   -- 101
SELECT DATEDIFF('2025-06-25', '2025-03-16');   -- 101

📌 날짜 차이 계산(포맷 설정 반환) _ TIMESTAMPDIFF()

SELECT TIMESTAMPDIFF(YEAR, '20250316', '20250625');   -- 년 차이 : 0
SELECT TIMESTAMPDIFF(MONTH, '20250316', '20250625');  -- 월 차이 : 3 
SELECT TIMESTAMPDIFF(DAY, '20250316', '20250625');    -- 일 차이 : 101
SELECT TIMESTAMPDIFF(HOUR, '20250316', '20250625');   -- 시 차이 : 2424

📌 요일 구하기 _ DAYNAME()

SELECT DAYNAME('20250614')  -- Saturday

📌 년/월/일 추출하기 _ YEAR/MONTH/DAY()

SELECT YEAR(20250614)    -- 2025
SELECT MONTH(20250614)   -- 6
SELECT DAY(20250614)     -- 14

📌 날짜 형식(타입) 변환 _ DATE_FORMAT()

SELECT DATE_FORMAT('20240614', '%Y/%m/%d')  -- 2024/06/14

📌 다른 나라 날짜 조회 _ GET_FORMAT()

SELECT GET_FORMAT()  -- 2024/06/14

✅ 집계/통계 관련 함수

📌 항목 총합(총계), 중간합계(소계) 구하기 _ WITH ROLLUP

상품별 합계값 구하기

SELECT
    product_id
    , SUM(price)
FROM Products
GROUP BY product_id WITH ROLLUP
;

product_id에 대한 총합을 마지막 행에 출력

| product_id | SUM(price)     |
| ---------- | -------------- |
| 1          | 85             |
| 2          | 115            |
| 3          | 20             |
| null       | 220            |

📌 누적값 구하기 _ SUM() OVER()

sum, avg 등 집계 합수에 대한 값을 각 row별로 집계하여 값을 출력한다.

-- 단순 합계값 출력 (row 1개)
SELECT SUM(<컬럼1>)

-- 각 row별 누적 합계값 출력 (row 여러개, 마지막 row에 총합값)
SELECT SUM(<컬럼1>) OVER(ORDER BY <컬럼2>)

✅ 순위 함수

📌 순위 구하기 _ ROW_NUMBER()

공동 순위를 인정하지 않는 방식으로 동작한다.
ORDER BY에 따라 값이 같아도 순위는 다를 수 있다.
ex) 점수가 100인 사람이 3명이어도 1등은 1명 뿐이다.

1위 (100점)
2위 (100점)
3위 (100점)
4위 (98점)
5위 (95점) ...

-- 모든 row에 대한 순위 구하기
SELECT ROW_NUMBER() OVER(ORDER BY <컬럼명>)


-- 그룹별 row에 대한 순위 구하기
SELECT ROW_NUMBER() OVER(PARTITION BY <컬럼명> ORDER BY <컬럼명>)

📌 순위 구하기 _ RANK()

[순위 개수를 인지하여 다음 순위에 적용]
1위
1위 (공동)
1위 (공동)
4위
5위 ...

-- 모든 row에 대한 순위 구하기
SELECT RANK() OVER(ORDER BY <컬럼명>)


-- 그룹별 row에 대한 순위 구하기
SELECT RANK() OVER(PARTITION BY <컬럼명> ORDER BY <컬럼명>)

📌 순위 구하기 _ DENSE_RANK()

[순위 개수를 무시]
1위
1위 (공동)
1위 (공동)
2위
3위 ...

-- 모든 row에 대한 순위 구하기
SELECT DENSE_RANK() OVER(ORDER BY <컬럼명>)


-- 그룹별 row에 대한 순위 구하기
SELECT DENSE_RANK() OVER(PARTITION BY <컬럼명> ORDER BY <컬럼명>)

0개의 댓글