데이터 형의 경우에는 숫자, 문자, 날짜 및 시간, 대용량 파일 등 다양한 카테고리가 존재한다. 단지 데이터베이스에 입력하거나 결과물을 출력할 때 알맞은 데이터 형을 매번 찾아서 사용하면 된다. 이번 게시글에서는 데이터 형식들을 쿼리에서 데이터 타입을 어떻게 변경하는지에 대한 간단한 예시를 남기고, MySQL에 존재하는 내장함수들을 알아보고자 한다.
데이터 타입 변경법
-- 데이터 형 변환에는 CAST와 CONVERT가 사용된다
USE sqldb ;
SELECT AVG(amount) AS '평균 구매 개수' FROM buytbl ;
-- 평균값이 소수점을 가진 실수로 나왔으므로 정수로 보기 위해서 변환을 해준다
SELECT CAST(AVG(amount) as SIGNED INTEGER) AS '평균 구매 개수' FROM buytbl ;
-- OR --
SELECT CONVERT(AVG(amount) , SIGNED INTEGER) AS '평균 구매 개수' FROM buytbl ;
-- 쿼리 결과를 보기좋게 변경할 수도 있다
SELECT num,
CONCAT(CAST(price AS CHAR(10)), 'X', CAST(amount AS CHAR(4)), '=') AS '단가X수량',
price*amount AS '구매액'
FROM buytbl ;
-- CONCAT(데이터 값, 데이터 값)은 어떤 형태의 데이터를 넣든 문자열로 변환하여 나열해준다
CAST와 CONVERT를 통해 원래의 데이터 형식에서 다른 데이터 형으로 변경하여 출력값을 더 간결하게 보이도록 하는 것이다.
내장함수 - 문자열 함수 모음
문자열 함수는 문자열, 즉 글과 같은 데이터를 조작하는 함수로 사용된다. 활용도가 높아 처음에 배치했다.
SELECT ASCII('A'), CHAR(65) ;
SELECT BIT_LENGTH('abc'), char_length('abc'), LENGTH('abc') ;
SELECT BIT_LENGTH('가나다'), CHAR_LENGTH('가나다'), LENGTH('가나다') ;
SELECT CONCAT_WS('/', '2025', '01', '01') ;
SELECT ELT(2, '하나', '둘', '셋'), FIELD('둘', '하나', '둘', '셋'),
FIND_IN_SET('둘', '하나,둘,셋'), INSTR('하나둘셋', '둘'), LOCATE('둘', '하나둘셋') ; -- LOCATE와 POSITION은 동일한 함수다
SELECT FORMAT(123456.123456, 4) ;
SELECT BIN(31), HEX(31), OCT(31) ;
SELECT INSERT('abcdefghi', 3, 4, '@@@@'), INSERT('abcdefghi', 3, 2, '@@@@') ;
SELECT LEFT('abcdefghi', 3), RIGHT('abcdefghi', 3) ;
SELECT LOWER('abcdEFGH'), UPPER('abcdEFGH') ; -- LOWER은 LCASE, UPPER은 UCASE와 동일한 함수이다
SELECT LPAD('이것이', 5, '##'), RPAD('이것이', 5, '##') ;
SELECT LTRIM(' 이것이'), RTRIM('이것이 ') ;
SELECT TRIM(' 이것이 '), TRIM(BOTH 'ㅋ' FROM 'ㅋㅋㅋ재밌어요.ㅋㅋㅋㅋ') ;
SELECT REPEAT ('이것이', 3) ;
SELECT REPLACE('이것이 MySQL이다.', '이것이', 'This is') ;
SELECT REVERSE ('MySQL') ;
SELECT CONCAT('이것이', SPACE(10), 'MySQL이다.') ;
SELECT SUBSTRING('대한민국만세', 3, 2);
SELECT SUBSTRING('대한민국만세' FROM 3 FOR 2) AS 'Substring 테스트';
SELECT SUBSTRING_INDEX('cafe.naver.com', '.', 2), SUBSTRING_INDEX('cafe.naver.com', '.', -2) ;
내장함수 - 제어 흐름 함수
제어 흐름 함수는 프로그램의 흐름을 제어하는 용도로 사용된다.
SELECT IF (100>200, '참이다', '거짓이다') ;
SELECT IFNULL (NULL, '널이군요'), IFNULL (100, '널이군요') ;
SELECT NULLIF (100,100), NULLIF (200,100) ;
-- CASE는 내장 함수는 아니지만 연산자로 분류
SELECT CASE 10
WHEN 1 THEN '일'
WHEN 5 THEN '오'
WHEN 10 THEN '십'
ELSE '모름'
END AS 'CASE연습';
내장함수 - 수학 함수
내장함수 중에서 수학적인 계산 및 기능을 담당하는 수학 함수도 있다.
SELECT ABS(-100) ;
SELECT COS(73) ; -- COS, SIN, TAN 등 삼각함수 기능 제공
SELECT CEILING(4.7), FLOOR(4.7), ROUND(4.7) ;
SELECT CONV('AA', 16, 2), CONV(100, 10, 8) ;
SELECT DEGREES(PI()), RADIANS(180) ;
SELECT LOG(2,16), LOG2(8) ; -- EXP, LN, LOG 등과 같은 지수, 로그 함수 제공
SELECT MOD(157,10), 157 % 10, 157 MOD 10 ; -- 나눗셈 후 나머지 값
SELECT POW(2,3), SQRT(9) ; -- 제곱 근, 루트
SELECT RAND(), FLOOR(1 + (RAND() * (7-1)) ) ; -- 0과 1 사이에서 랜덤한 숫자, 특정 범위 내 랜덤 숫자
SELECT SIGN(100), SIGN(0), SIGN(-100.2314) ;
SELECT TRUNCATE(12345.12345, 3), TRUNCATE(12345.12345, -2) ;
내장함수 - 날짜 및 시간
SELECT ADDDATE('2025-01-01', INTERVAL 30 DAY), ADDDATE('2025-01-01', INTERVAL 1 MONTH) ;
SELECT SUBDATE('2025-01-01', INTERVAL 30 DAY), SUBDATE('2025-01-01', INTERVAL 1 MONTH) ;
SELECT ADDTIME('2025-01-01 23:59:59', '1:1:1'), ADDTIME('15:00:00', '2:10:10') ;
SELECT SUBTIME('2025-01-01 23:59:59', '1:1:1'), SUBTIME('15:00:00', '2:10:10') ;
SELECT CURDATE() ;
SELECT CURTIME() ;
SELECT NOW() ;
SELECT SYSDATE() ;
SELECT DATEDIFF('2025-01-01', NOW()), TIMEDIFF('23:59:59', '12:11:10') ;
SELECT DAYOFWEEK(CURDATE()), MONTHNAME(CURDATE()), DAYOFYEAR(CURDATE()) ;
SELECT LAST_DAY('2025-02-01') ;
SELECT MAKEDATE(2025, 32) ;
SELECT MAKETIME(12, 11, 10) ;
SELECT PERIOD_ADD(202501, 11), PERIOD_DIFF(202501, 202312) ;
SELECT QUARTER('2025-07-07') ;
SELECT TIME_TO_SEC('12:11:10') ;
내장함수 - 시스템 정보 함수
시스템 내부 정보를 추출하는 함수이다.
SELECT CURRENT_USER(), DATABASE() ;
USE sqldb ;
SELECT * FROM usertbl ;
SELECT FOUND_ROWS() ;
USE sqldb ;
UPDATE buytbl SET price=price*2 ;
SELECT ROW_COUNT() ;
SELECT VERSION() ;
SELECT SLEEP(5);
SELECT '5초 후에 이게 보여요' ;
MySQL은 수많은 다양한 기능에 맞게 함수를 제공한다. 이곳에 다 나열하는 것은 너무 비효율적이므로 참조할 수 있는 공식 사이트의 링크를 남기겠다. 위에서 나열한 MySQL 내장함수는 본인이 카테고리 별로 분류된 함수들을 실습하고 SQL문을 기록으로 남긴 것이다. (필자의 MySQL 워크밴치 버전은 8.0.17이다.)
'IT Self-study > MySQL & Database' 카테고리의 다른 글
| (실습) 영화사이트 데이터베이스 구축 (0) | 2025.01.08 |
|---|---|
| 변수 지정 및 사용 예시 (0) | 2025.01.08 |
| 비재귀적 CTE(Common Table Expression): WITH (0) | 2025.01.08 |
| 데이터 변경: INSERT, UPDATE, DELETE (0) | 2025.01.08 |
| 집계 함수: 데이터 그룹화 (0) | 2025.01.07 |