DB

MYSQL 데이터 형식과 내장함수

그zi운아이 2023. 9. 21. 16:34

숫자 데이터 형식

DECIMAL은 정확한 수치를 저장하고 FLOAT와 DOUBLE은 근사치으 숫자를 저장한다.

부호없는 정수를 지정할 때는 UNSIGNED예약어를 뒤에 붙여주고 2배 더 큰 숫자까지 표현할 수 있다.

데이터 형식 바이트 수 숫자 범위 설명
BIT(N) N/8   1~64bit를 표현
TINYINT 1 -128~+127 정수
SMALLINT 2 -32768 ~ 23767 정수
MEDIUMINT 3 -8388608 ~ 8388607 정수
INT
INTEGER
4 약 -21억 ~ 21억 정수
BIGINT 8 약 -900경~ + 900경 정수
FLOAT -3.40E+38~-1.17E+38 소수점 아래 7자리까지 표현
DOUBLE
REAL
8 -1.22E-308~1.79E1+308 소수점 아래 15자리까지 표현
DECIMAL(m.[d])
NUMERIC(m,[d])
5~17 -10^38+1~ 10^38 -1 전체 자리수와 소수점 이하 자리수를 가진 숫자형

문자형 데이터 형식

CHAR 형식은 고정길이 문자형으로 자릿수가 고정되어있고 VARCHAR형식은 가변길이 문자형으로 효율적으로 운영할 수 있다는 장점이 있지만 CHAR형식으로 설정하는 것이 INSERT/UPDATE시에 일반적으로 좋은 성능을 발휘한다.

데이터형식  바이트수 설명
CHAR(n) 1~255 고정길이 문자형
VARCHAR(n) 1~65535 가변길이 문자형
BINARY 1~255 고정길이의 이진 데이터 
VARBINARY 1~255 고정길이의 이진 데이터
TXT형식 TINYTEXT 1~255 255 크기의 TEXT데이터 
TEXT 1~65635 N 크기의 TEXT데이터 값
MEDIUM 1~16777215 16777215크기의 TEXT데이터 값
LONGTEXT 1~4294967295 ,최대 4GB 크기의 BLOB데이터 값
BOLB 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 날짜는 1001-01-01 ~ 9999-12-31까지 저장되며 날짜 형식만 사용 YYYY_MM_DD형식으로 사용됨
TIME 3 -838:59.000000~38:59.000000까지 저장되며 "HH:MM:SS' 형식으로 사용
DATETIME 8 날짜는 1001-01-01 00:00:00 ~ 9999-12-31 23:59:59까지 저장되며 형식은 YYYY-MM--DD HH:MM:SS 형식으로 사용
TIMESTAMP 4 time_zone 시스템 변수와 관련이 있으며 UTC 시간대 변환하여 저장
YEAR  1 1901 ~ 2155까지 저장.YYYY형식으로 사용

기타 데이터 형식

데이터 형식 바이트 수 설명
GEOMERTY N?A 공간 데잍 형식으로 선 점 및 다각형 같은 공간 데이터 개체를 저장하고 조작
JSON 8 JSON 문서를 저장

데이터 형 변환 함수

BINARY,CHAR,DATE,DATETIME,DECIMAL,JSON,SIGNED,INTEGER,TIME,INSIGNED,INTEGER 등 변환이 가능하다. 

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

MYSQL 내장함수

mySQL은 많은 내장 함수를 포함한다. 내장함수는 크게, 제어 흐름 함수, 문자열 함수, 수학함수 ,날짜/시간 함수, 전체 텍스트 검색 함수, 형 변환함수, XML 함수, 비트 함수, 보안/암축 함수, 정보 함수, 공간 분석 함수,기타 함수 등으로 나눌 수 있다.

제어 흐름 함수

IF(수식,참,거짓)

수식이 참 또는 거짓인지 결과에 따라서 2중 분기한다.

SELECT IF (100>200,'참이다','거짓이다');

IFNULL(수식1, 수식2)

NULL 값 처리 함수 중 하나입니다. 이 함수는 두 개의 인자를 받으며, 첫 번째 인자가 NULL인 경우 두 번째 인자를 반환합니다. 첫 번째 인자가 NULL이 아닌 경우에는 첫 번째 인자를 그대로 반환합니다.

IFNULL(expression1, expression2)

NULLIF(수식1,수식2)

수식1과 수식2가 같으면 NULL을 반환하고, 다르면 수식1을 반환한다.

IFNULL(expression1, expression2)

 

CASE~WHEN~ELSE~ END

Case문은 조건에 따라 다른 값을 반환하는데 사용된다.

CASE expression
    WHEN value1 THEN result1
    WHEN value2 THEN result2
    ...
    ELSE default_result
END

 

문자열 함수

문자열 함수는 문자열을 조작한다. 활용도가 높음편에 속한다.

 

ASCII(아스키 코드),CHAR(숫자)

문자의 아스키 코드값을 돌려주거나 숫자의 아스키 코드값에 해당하는 문자를 돌려준다.

SELECT ASCII('A'), CHAR(65);

BIT_LENGTH(문자열), CHAR_LENTH(문자열),LENGTH(문자열)

할당된 Bit 크기 또는 문자 크기를 반환한다. CHAR_LENGTH()는 문자의 개수를 반환하며 LENGTH()는 할당된 Byte 수를 반환한다.

SELECT BIT_LENGTH('abc'), CHAR_LENGTH('abc'), LENGTH('abc');
SELECT BIT_LENGTH('가나다'), CHAR_LENGTH('가나다'), LENGTH('가나다');

CONCAT(문자열1,문자열2,...),CONCAT_WS(구분자,문자열1,문자열2...)

CONCAT()은 문자열을 이어준다.  CONCAT_WS()는 구분자와 함께 문자열을 이어준다.

SELECT CONCAT('Hello', ' ', 'World');  -- 결과: 'Hello World'
SELECT CONCAT('Hello', NULL, 'World');  -- 결과: NULL

ELT(위치,문자열1, 문자열 2,...)

위치 번쨰에 해당하는 문자열을 반환한다.

FIELD(찾을 문자열,문자열1,문자열2,...)

찾을 문자열의 위치를 찾아서 반환한다. 매치되는 문자열이 없으면 0을 반환한다.

FIND_IN_SET(찾을 문자열,문자열 리스트)

찾은 문자열을 문자열 리스트에서 찾아 위치를 반환한다.

INSTR(기준문자열,부분 문자열)

기준 문자열에서 부분 문자열을 찾아서 그 시작 위치를 반환한다.

LOCATE(부분문자열, 기준문자열)

INSTR()와 동일하지만 파라미터의 순서가 반대로 되어있다.

SELECT ELT(2,'하나','둘'.'셋'),FIELD('둘','하나','둘','셋'), FIND_IN_SET('둘','하나,둘,셋'),INSTR('하나둘셋','둘'),LOCATE('둘','하나둘셋');
-- 결과 : '둘',2,2,3,3

FORMAT(숫자, 소수점 자릿수)

숫자를 소수점 아래 자릿수까지 표현한다, 또한 1000단위마다 콤마를 표시해 준다.

SELECT FORMAT(123456.123456,4) -- 결과: 123,456,1235

BIN(숫자),HEX(숫자),OCT(숫자)

2진수 16진수 8진수의 값을 반환한다

SELECT BIN(31),HEX(31),OCT(31); -- 결과: 11111,1F,37

INSERT(기준 문자열,위치,길이,삽일할 문자열)

기준 문자열의 위치부터 길이만큼 지우고 삽입할 문자열을 끼워 넣는다.

SELECT INSERT('abacdefghi',3,4,'@@@@') -- 결과 : ab@@@@ghi'

LEFT(문자열,길이), RIGHT(문자열,길이)

왼쪽 또는 오른쪽에서 문자열의 길이만큼 반환한다.

SELECT LEFT('abcdefghi',30,RIGHT('abcdefghi',3); -- 결과 : 'abc','ghi'

UPPDER(문자열), LOWER(문자열)

소문자를 대문자로,대문자를 소문자로 변경한다.

SELECT LOWER('abcdEFGH'), UPPER('abcdEFGH'); -- 결과 : abcdefgh ABCDEFGH

TRIM(문자열)

문자열의 앞뒤 공백을 모두 없앤다.

SELECT TRIM(' 안녕  ') -- 결과 : '안녕'

REPEAT(문자열,횟수)

문자열을 횟수만큼 반복한다

SELECT REPEAT('안녕',3) -- 결과 : '안녕안녕안녕'

REPLACE(문자열,원래 문자열, 바꿀문자열)

문자에서 원래문자열을 찾아서 바꿀 문자열로 바꿔준다.

SELECT REPLACE('안녕 나는 김태훈입니다','안녕','하이'); -- 결과 : '하이 나는 김태훈입니다'

REVERSE(문자열)

문자열의 순서를 거꾸로 만든다.

SELECT REVERS('MYSQL'); -- 결과 LQSYM

SPACE(길이)

길이의 공백만큼을 반환한다.

SELECT CONCAT('안녕',SPACE(10),'김태훈이다'); -- 결과 : '안녕          김태훈이다'

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

시작 위치부터 길이만큼 문자를 반환한다.

SELECT SUBSTRING_INDEX('cafe.naver.com','.'2) -- 결과 'cafe.naver'

수학함수

ABS(숫자)

숫자의 절댓값을 계산한다.

SELECT ABS(-100) -- 결과 : 100

CEILING(숫자),FLOOR(숫자),ROUND(숫자)

올림,내림 반올림을 계산한다.

SELECT CEILING(4.7), FLOOR(4.7) ,ROUND(4.7) --결과 : 5 4 5

외에도 CON(),DEGREES(),RADIANS,EXP,MOD,POW등 다양한 수학 함수를 제공한다.

 

날짜함수

ADDDATE(날짜,차이),SUBDATE(날짜,차이)

날짜를 기준으로 차이를 더하거나 뺸 날짜를 구한다.

SELECT ADDDATE('2025-01-01',INTERVAL 31DAY) --결과 : '2025-02-01'

ADDTIME(날짜/시간,시간),SUBTIME(날짜/시간,시간)

날짜/시간을 기준으로 시간을 더하거나 뺸 결과를 구한다.

SELECT ADDTIME('2025-01-01 23:59:59','1:1:1'),SUBTIME('15:00:00','2:10:10');

CURDATE(),DURTIME(),NOW(),SYSDATE()

CURATE()는 현재 연-월-일을 CURATIME()은 현재 시:분:초를 구한다. NOW()와 뇬SYSDATE()는 현재 '연-월-일 시:분:초'를 구한다.

그외에서 날짜 관련 함수로는 DATE(),TIME(),DATEDIFF(),DAYOFWEEK(),LAST_DAY(),MAKEDATE(),PERIOD_ADD

QUARTER()들이 있다.

'DB' 카테고리의 다른 글

[DB] 뷰  (0) 2023.09.27
MYSQL 제약 조건  (0) 2023.09.27
SQL 프로그래밍  (0) 2023.09.23
조인(JOIN)  (0) 2023.09.22
SQL 기본  (0) 2023.09.15