Data Analyst KIM

[MySQL] 데이터 형식 및 내장 함수 본문

데이터 분석/SQL

[MySQL] 데이터 형식 및 내장 함수

김두연 2023. 7. 23. 00:16
반응형

 

<데이터 형식>

 

  • 숫자
    • INT : 정수 / FLOAT : 실수
  • 문자
    • CHAR(n) : 고정된 문자 / VARCHAR(n) : 가변 문자
  • 날짜와 시간
    • DATE : ‘YYYY-MM-DD’ / TIME : ‘HH:MM:SS’
    • DATETIME : ‘YYYY-MM-DD HH:MM:SS’
  • 기타 형식
    • GEOMETRY / JSON

 


<내장 함수>

 

<제어 흐름 함수>

  • IF(수식,참,거짓)
  • IFNULL(수식 1,수식 2) : 수식 1이 NULL이면 수식 2 반환, 아니면 수식 1 반환
  • NULLIF(수식 1,수식 2) : 수식 1,2가 같으면 NULL, 아니면 수식 1 반환
  • CASE ~ WHEN ~ ELSE ~ END
SELECT IF (100>200,’참’,’거짓’);
SELECT IFNULL(NULL,'널이군요'),IFNULL(100,'널이군요')
SELECT NULLIF(100,100),NULLIF(200,100)

SELECT CASE 10
		WHEN 1 THEN '일'
		WHEN 5 THEN '오'
		WHEN 10 THEN '십'
		ELSE '모름'
	END AS 'CASE연습';

<문자열 함수>

  • ASCII(아스키 코드),CHAR(숫자)
  • BIT_LENGTH(문자열), CHAR_LENGTH(문자열), LENGTH(문자열) : 크기 반환
  • CONCAT(문자열 1,문자열 2,…) : 문자열 연결
  • ELT(숫자,문자,문자,...) : 위치 반환
  • FIELD : 찾을 문자열의 위치 반환
  • FIND_IN_SET : 리스트 안에 해당 문자열 위치 반환
  • INSAR : 시작 위치 반환
  • LOCATE : 시작 위치 반환
SELECT ELT(2, '하나', '둘', '셋');
SELECT FIELD('둘', '하나', '둘', '셋');
SELECT FIND_IN_SET('둘', '하나,둘,셋');
SELECT INSTR('하나둘셋', '둘');
SELECT LOCATE('둘', '하나둘셋');

 

  • FORMAT(n,소수점 자릿수) : 콤마 표시 및 소수점 아래 자릿수 표시
  • BIN(n), HEX(n),OCT(n) : 2,16,8 진수 값 반환
  • INSERT(기준 문자열,위치,길이,삽입할 문자열) : 문자열 삽입
  • LEFT(문자열,n),RIGHT(문자열,n) : 문자열의 길이만큼 반환
  • UPPER(문자열),LOWER(문자열) : 대소문자로 반환
  • LPAD or RPAD(문자열,길이,채울 문자열)
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');
SELECT LPAD('이것이', 5, '##'), RPAD('이것이', 5, '##');

 

  • LTRIM or RTRIM(문자열) : 왼쪽/오른쪽 공백 제거
  • TRIM(문자열), TRIM(방향 자를_문자열 FROM 문자열) : 공백 제거
  • REPEAT(문자열,n) : 문자열 반복
  • PEPLACE(문자열,원래 문자열,바꿀 문자열) : 문자열 대체
  • REVERSE(문자열) : 문자열 순서를 거꾸로
  • SPACE(n)               : 길이만큼의 공백을 반환
  • SUBSTRING(문자열,시작 위치,길이) : 시작 위치부터 길이만큼 문자를 반환
  • SUBSTRING(문자열 FROM 시작 위치 FOR 길이)
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_INDEX('cafe.naver.com', '.', 2),  SUBSTRING_INDEX('cafe.naver.com', '.', -2);

<수학 함수>

  • ABS(숫자): 절대 값
  • CEILING / ROUND / FLOOR : 올림,반올림,내림
  • CONV : 진수 변환 
  • MOD or % : 나머지
  • POW : 거듭 제곱
  • SQRT : 루트
  • RAND : 랜덤 함수(0~1)
  • SIGN : 양수 여부에 따른 -1,0,1 반환
  • TRUNCATE(숫자,정수): 소수 자리 버림
SELECT ABS(-100);
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 MOD(157, 10), 157 % 10, 157 MOD 10;
SELECT POW(2,3), SQRT(9);
SELECT RAND(), FLOOR(1 + (RAND() * (6-1)) );
SELECT SIGN(100), SIGN(0), SIGN(-100.123);
SELECT TRUNCATE(12345.12345, 2), TRUNCATE(12345.12345, -2);

<날짜 및 시간 함수>

  • ADDDATE(날짜,차이)         : 날짜 및 시간을 기준으로 차이를 더하거나 뺌
  • SUBDATE(날짜/시간,시간) : 날짜 및 시간을 기준으로 차이를 더하거나 뺌
  • CURDATE : ‘연-월-일’
  • CURTIME : ‘시:분:초’
  • NOW , SYSDATE : ‘연-월-일 시:분:초 ‘
  • YEAR , MONTH , DAY , HOUR , MINUTE , SECOND , MICROSECOND
  • DATE , TIME : ‘연-월-일 시:분:초’ ⇒ DATETIME 형식에서!!
  • DATEDIFF , TIMEDIFF : 날짜 or 시간의 차이
  • DAYOFWEEK , MONTHNAME , DAYOFYEAR
  • LAST_DAY : 그 달의 마지막 날
  • MAKEDATE(연도,정수) : 연도에서 정수만큼 지난 날
  • MAKETIME(시,분,초) : 시:분:초의 TIME형식을 만들어 줌
  • PERIOD_ADD(연월,개월수) , PERIOD_DIFF(연월1,연월2)
  • QUARTER(날짜) : 분기
  • TIME_TO_SEC(시간) : 초 단위로 환산
SELECT ADDDATE('2025-01-01', INTERVAL 31 DAY), ADDDATE('2025-01-01', INTERVAL 1 MONTH);
SELECT SUBDATE('2025-01-01', INTERVAL 31 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 YEAR(CURDATE()), MONTH(CURDATE()), DAYOFMONTH(CURDATE);
SELECT HOUR(CURTIME()), MINUTE(CURRENT_TIME()), SECOND(CURRENT_TIME), MICROSECOND(CURRENT_TIME);

SELECT DATE(NOW()), TIME(NOW());
SELECT DATEDIFF('2025-01-01', NOW()), TIMEDIFF('23:23: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');

<시스템 정보 함수>

  • USER(),DATABASE() : 현재 사용자 및 선택된 데이터베이스를 구함
  • FOUND_ROWS : 조회된 행의 개수
  • ROW_COUNT()
  • VERSION() : 현재 버전
  • SLEEP(초) : 쿼리 실행을 잠시 멈춤
SELECT CURRENT_USER(), DATABASE();

USE sqldb;
SELECT * FROM usertbl;
SELECT FOUND_ROWS();

USE sqldb;
UPDATE buytbl SET price=price*2;
SELECT ROW_COUNT();

SELECT SLEEP(5);
SELECT '5초후에 이게 보여요';
반응형