KB IT's Your Life/DB

[02] 데이터 타입, 내장함수

지식보부상님 2025. 5. 21. 14:03

[1] MySQL 의 데이터 형식

◈ 숫자 데이터 형식

데이터 형식 바이트 수 숫자 범위 설명
`BIT(N)` N/8   1~64big 표현, b'0000' 형식으로 표현함
`TINYINT` 1 -128~127 정수
`SMALLINT` 2 -32,768~32,767 정수
`MEDIUMINT` 3 -8,388,608~8,388,607 정수
`INT` `INTEGER` 4 약 -21억~21억 정수
`BIGINT` 8 약 -900경~+900경 정수
`FLOAT` 4 -3.40E+38~-1.17E-38 소수점 아래 7자리까지
`DOUBLE` `REAL` 8 -1.22E-308~1.79E+308 소수점 아래 15자리까지
`DECIMAL(m, [d])`
`NUMERIC(m, [d])`
5~17 -10^38+1~+10^38-1 전체 자릿수(m)과 소수점 이하 자릿수(d) 가진 숫자형
ex) `decimal(5,2)` : 전체 자릿수는 5자리, 그 중 소수점 이하 2자리 차지

 

◈ 문자 데이터 형식

데이터 형식 바이트 수 설명
`CHAR(n)` 1~255 고정길이 문자형, `n` : 1~255 지정,  `n` 생략시 1
`VARCHAR(n)` 1~65535 가변길이 문자형 `n` : 1~65535 지정
`BINARY(n)` 1~255 고정길이 이진 데이터
`VARBINARY(n)` 1~255 가변길이 이진 데이터
TEXT 형식 `TINYTEXT` 1~255 255크기 TEXT 데이터
`TEXT` 1~65535 N 크기 TEXT 데이터
`MIDUMTEXT` 1~16777215 16777215 크기 TEXT 데이터
`LONGTEXT` 1~4294967295 최대 4GB TEXT 데이터
BLOB 형식 `TINYBLOB` 1~255 255 크기 BLOB 데이터
`BLOB` 1~65535 N 크기 BLOB 데이터
`MEDIUMBLOB` 1~16777215 16777215 크기 BLOB 데이터
`LONGBLOB` 1~4294967295 최대 4GB BLOB 데이터
ENUM(값들..) 1 또는 2 최대 65535개 열거형 데이터
SET(값들..) 1, 2, 3, 4, 8 최대 64개 서로 다른 데이터

 

◈ 날짜 및 시간 데이터 형식

데이터 형식 바이트수 설명
`DATE` 3 `YYYY-MM-DD` 형식, 1001-01-01~9999-12-31
`TIME` 3 `HH:MM:SS` 형식
`DATETIME` 8 `YYYY-MM-DD HH:MM:SS` 형식
`TIMESTAMP` 4 `YYYY-MM-DD HH:MM:SS` 형식
`YEAR` 1 `YYYY` 형식, 1901~2155까지

 

◈ 기타 데이터 형식

데이터 형식 바이트수 설명
`GEOMETRY` N/A 공간 데이터 형식(선, 점 및 다각형 등)
`JSON` 8 JSON 문서 저장

 

◈ 데이터 형식 변환

- `CAST()` 또는 `CONVERT()` 이용

CAST ( expression AS 데이터형식 [(길이)] )
CONVERT ( expression, 데이터형식 [(길이)] )

- `데이터 형식` : `BINARY`, `CHAR`, `DATE`, `DATETIME`, `DECIMAL`, `JSON`, `SIGNED` `INTEGER`, `TIME`, `UNSIGNED INTEGER`

더보기

ex) sqlDB의 구매테이블(buytbl)에서 평균 구매개수 구하는 쿼리문

SELECT CAST(AVG(amount) AS SIGNED INTEGER) AS '평균 구매 개수' FROM buytbl;
SELECT CONVERT(AVG(amount), SIGNED INTEGER) AS '평균 구매 개수' FROM buytbl;

[2] MySQL 내장 함수 

◈ 제어 흐름 함수

- 프로그램 흐름 제어

  • `IF (수식, 참, 거짓)` : 수식의 참/거짓에 따른 실행문 실행
  • `IFNULL(수식1, 수식2)` : 수식1이 NULL이 아니면 수식1 반환, NULL이면 수식2 반환
  • `NULLIF(수식1, 수식2)` : 수식1 == 수식2  NULL 반환, 다르면 수식1 반환
  • `CASE ~ WHEN ~ ELSE ~ END` : 내장 함수는 아니고 연산자(Operator)
  • SELECT CASE 10
    WHEN 1 THEN '일'
    WHEN 5 THEN '오'
    WHEN 10 THEN '십' -- 결과는 '십' 반환
    END AS 'CASE예제'; -- 해당 사항이 없이면 END 반환

◈ 문자열 함수

- 문자열 조작 함수

함수 설명
`ASCII(문자)` 문자 아스키코드값 반환
`CHAR(숫자)`  숫자 아스키코드값 반환
`BIT_LENGTH(문자열)` 할당된 비트 크기 또는 문자 크기 반환
`CHAR_LENGTH(문자열)` 문자의 개수 반환
`LENGTH(문자열)`  할당된 Byte 수 반환
`CONCAT(문자열1, 문자열2, ..)` 문자열 하나로 이어줌
`CONCAT_WS(구분자, 문자열1, 문자열2, ..)` 구분자와 함께 문자열 이어줌
`GROUP_CONCAT(문자열 SEPARATOR '구분자')` GROUP BY 항목의 개별 내용을 하나의 문자열로 연결

`ELT(위치, 문자열1, 문자열2, ...)` 위치번째에 해당하는 문자열 반환
`FIELD(찾을 문자열, 문자열1, 문자열2)` 찾을 문자열 위치 찾아 반환, 없으면 0 반환
`FIND_IN_SET(찾을 문자열, 문자열 리스트)` 찾을 문자열을 문자열 리스트에서 찾아 위치 반환, 없으면 0 반환
- 문자열 리스트는 콤마(,)로 구분, 공백 없어야
`INSTR(기준 문자열, 부분 문자열)` 기준 문자열에서 부분 문자열 찾아 시작 위치 반환
`LOCATE(부분 문자열, 기준 문자열)`  INSTR() 과 동일한 역할
`FORMAT(숫자, 소수점자릿수)`  숫자 소수점 아래 자릿수까지 표현, 1000단위마다 콤마
`BIN(숫자)`, `HEX(숫자)`, `OCT(숫자)` 2, 16, 8진수 값 반환
`INSERT(기준 문자열, 위치, 길이, 삽입할 문자열)`  기준 문자열 위치부터 길이만큼 지우고 삽입할 문자열 삽입
`LEFT(문자열, 길이)`, `RIGHT(문자열, 길이)` 왼쪽/오른쪽에서 문자열 길이만큼 반환
`UPPER(문자열)`, `LOWER(문자열)` 소문자 ->대문자 / 대문자 -> 소문자
`LPAD(문자열, 길이, 채울문자열)` 문자열 길이만큼 늘린 후 왼쪽부터 빈곳 채움
`RPAD(문자열, 길이, 채울문자열)` 문자열 길이만큼 늘린 후 오른쪽부터 빈곳 채움
`LTRIM(문자열)`, `RTRIM(문자열)` 문자열 왼/오른쪽 공백 제거, 중간 공백은 제거 안됨
`TRIM(문자열)`
`TRIM(방향 자를문자열 FROM 문자열)` 
문자열 앞뒤 공백 제거
방향: `LEADING`(앞), `BOTH`(양쪽), `TRAILING`(뒤)
`REPEAT(문자열, 횟수)`  문자열 횟수만큼 반복
`REPLACE(문자열, 원래문자열, 바꿀문자열)`  문자열에서 원래 문자열 찾아서 바꿀문자열로 바꿈
`SPACE(길이)`  길이만큼 공백 반환
`SUBSTRING(문자열, 시작위치, 길이)` 
`SUBSTRING(문자열 FROM 시작위치 FOR 길이)` 
시작위치부터 길이만큼 문자 반환, 길이 생략되면 문자열 끝까지
`SUBSTRING_INDEX(문자열, 구분자, 횟수)` 문자열에서 구분자가 왼쪽부터 횟수번째 나오면 그 이후는 버림 횟수가 음수면 오른쪽부터 세고 왼쪽을 버림
더보기

- GROUP_CONCAT() 예제

SELECT u.userID, u.name, GROUP_CONCAT(b.prodName SEPARATOR ',') AS '상품목록'
FROM usertbl u LEFT OUTER JOIN buytbl b ON u.userID = b.userID
GROUP BY u.userID, u.name
ORDER BY u.userID;

◈ 수학 함수

함수 설명
`ABS(숫자)` 절댓값
`ACOS(숫자)` `ASIN(숫자)`,
`ATAN(숫자)`, `ATAN2(숫자1, 숫자2)`,
`SIN(숫자)`, `COS(숫자)`, `TAN(숫자)`
삼각함수
`CEILING(숫자)`, `FLOOR(숫자)`, `ROUND(숫자)` 올림, 내림, 반올림
`CONV(숫자, 원래 진수, 변환할 진수)` 숫자의 진수 변환
`DEGREES(숫자)`, `RADIANS(숫자)` 라디안 -> 각도, 각도 -> 라디안
`PI()` 3.141592 반환
`EXP(숫자)`, `LN(숫자)`,
`LOG(숫자)` `LOG(밑수, 숫자)`,
`LOG2(숫자)`, `LOG10(숫자)`
지수, 로그 함수
`MOD(숫자1, 숫자2)` 또는 `숫자1 MOD 숫자2` 또는 
`숫자1 % 숫자2`
숫자1을 숫자2로 나눈 나머지
`POW(숫자1, 숫자2)` 숫자1의 숫자2 거듭제곱
`SQRT(숫자)` 제곱근
`RAND()` 0이상 1미만 랜덤 실수
m <= 임의의 정수 < n 구하고 싶으면
`FLOOR(m + (RAND() * (n-m) )`
`SIGN(숫자)` 숫자가 양수, 0, 음수인지 판별
결과는 1, 0, -1로 반환함
`TRUNCATE(숫자, 정수)` 숫자를 소수점 아래 정수 위치까지 구하고 나머지 버림

 

◈ 날짜 및 시간 함수

함수 설명
`ADDDATE(날짜, 차이)` 날짜를 기준으로 차이 더한 날짜 구함
`SUBDATE(날짜, 차이)` 날짜를 기준으로 차이 뺀 날짜 구함
`ADDTIME(날짜/시간, 시간)` 날짜/시간을 기준으로 차이 더한 날짜 구함
`SUBTIME(날짜/시간, 시간)` 날짜/시간을 기준으로 차이 뺀 날짜 구함
`CURDATE()` 현재 연-월-일
`CURTIME()` 현재 시:분:초
`NOW()`, `SYSDATE()` 현재 연-월-일 시:분:초
`YEAR(날짜)` 날짜에서 년도 추출
`MONTH(날짜)`, `MONTHNAME(날짜)` 날짜에서  추출
`DAY(날짜)` 날짜에서  추출
`HOUR(시간)` 시간에서 시간 추출
`MINUTE(시간)` 시간에서 추출
`SECOND(시간)` 시간에서  추출
`MICROSECOND(시간)` 시간에서 밀리 추출
`DATE()` DATETIME 형식에서 연-월-일만 추출
`TIME()` DATETIME 형식에서 시:분:초만 추출
`DATEDIFF(날짜1, 날짜2)`
`TIMEDIFF(날짜1/시간1, 날짜2/시간2)`
날짜1(시간1) - 날짜2(시간2) 의 일수/시간 추출
`DAYOFWEEK(날짜)` 날짜의 요일(1:일, 2:월~7:토) 구함 
`DAYOFYEAR(날짜)` 1년중 몇번째 날짜인지 구함
`LAST_DAY(날짜)` 주어진 날짜의 마지막 날짜 구함
`MAKEDATE(년도, 정수)` 년도에서 정수만큼 지난 날짜 구함
`MAKETIME(시, 분, 초)` 시, 분, 초 이용해서 시:분:초 의 TIME 형식 만듦
`PERIOD_ADD(년월, 개월수)` 년월에서 개월수만큼 지났을 때의 년월 구함
`PERIOD_DIFF(년월1, 년월2)` 년월1-년월2 의 개월수
`QUARTER(날짜)` 날짜가 4분기 중 몇분기인지 구함
`TIME_TO_SEC(시간)` 시간을 초 단위로 구함