[Database] MySQL Built-in Function

게맛살맛게·2021년 12월 16일
0

DB

목록 보기
7/23

MySQL 내장 함수


숫자 관련 함수

함수기능
ABS(숫자)절대값 출력
CEILING(숫자)값보다 큰 정수 중 가장 작은수
FLOOR(숫자)값보다 작은 정수 중 가장 큰 정수 (실수를 무조건 버림)
ROUND(숫자, 자리수)숫자를 소숫점 이하 자리수에서 반올림 (자릿수는 양수, 0, 음수 가능)
TRUNCATE(숫자, 자리수)숫자를 소수점 이하 자리수에서 버림
POW(X, Y)X의 Y승
MOD(분자, 분모)나머지 연산 (%)
GREATEST(n1, n2, n3, ...)주어진 수 중 제일 큰 수
LEAST(n1, n2, n3, ...)주어진 수중 제일 작은 수
FORMAT(숫자, 자리수)주어진 숫자에 천 단위 쉼표 구분과 소숫점 이하의 자리수 설정
-- 절대값.
SELECT 3, ABS(3), ABS(-3) FROM DUAL;		// 3 3 3
-- 반올림과 버림
SELECT ROUND(7777.56789), ROUND(7777.56789 ,1), ROUND(7777.56789 ,4), ROUND(7777.56789 ,-1) , ROUND(7777.56789 ,-2) FROM DUAL;
// 	     7778		7777.6		      7777.5679		    7780		    7800

SELECT TRUNCATE(7777.56789 ,1), TRUNCATE(7777.56789 ,4), TRUNCATE(7777.56789 ,-1), TRUNCATE(7777.56789 ,-2) FROM DUAL;
// 		7777.5			 7777.5678		  7770			    7700
-- 나머지.
SELECT 5%3, mod(5,3) FROM DUAL;
-- 나머지 함수들
SELECT CEILING(3.14), FLOOR(3.14), GREATEST(1,2,3,4,5), LEAST(1,2,3,4,5) FROM DUAL;
SELECT FORMAT(123456789.123456, 3) as "소수점 쉼표구분", 
 FORMAT(123456789, 4) as "정수 쉼표구분", FORMAT(123456789, 0) as "소수점이하 없이 정수 쉼표구분";

문자 관련 함수

함수기능
ASCII(문자)문자의 아스키 코드값 리턴
CONCAT('s1', 's2', 's3', ...)문자열 연결
CONCAT_WS('구분자', 's1', 's2', 's3', ...)구분자와 함께 문자열 연결
INSERT(‘문자열’,’시작위치’,’길이’,’새 문자열’)문자열의 시작위치부터 길이만큼 새로운 문자열로 대치
REPLACE(‘문자열’,’기존문자열’,’바뀔문자열’)기존 문자열을 바뀔 문자열로 대치
INSTR(‘문자열’,’찾는문자열’)문자열 중 찾는 문자열의 위치값을 출력
MID(‘문자열’,시작위치, 개수)문자열 중 시작위치부터 개수만큼 출력(시작 : 1)
SUBSTRING(‘문자열’,시작위치,개수)문자열 중 시작위치부터 개수만큼 출력
LTRIM(‘문자열’)문자열의 왼쪽 공백 제거
RTRIM(‘문자열’)문자열의 오른쪽 공백 제거
TRIM(‘문자열’)양쪽 공백 모두 제거
LCASE(‘문자열’) or LOWER(‘문자열’)소문자로 변환
UCASE(‘문자열’) or UPPER(‘문자열’)대문자로 변환
REVERSE(‘문자열’)문자열 반전
LEFT(‘문자열’, 개수)문자열 중 왼쪽에서 개수만큼 추출
RIGHT(‘문자열’, 개수)문자열 중 오른쪽에서 개수만큼 추출
CHAR_LENGTH(‘문자열’ )문자의 개수 반환
LENGTH(‘문자열’)할당된 Byte 수 반환
SELECT 'A', ASCII('A'), ASCII(' ') FROM DUAL; 				// A	65	32
SELECT CONCAT('java',' 화이팅') AS 화이팅;				// java 화이팅
SELECT CONCAT_WS('**','sql',' 화이팅') AS '화이팅 !!';			// sql** 화이팅
SELECT CONCAT(ename,'의 급여는 ', sal, '입니다.') AS 명세 FROM EMP;	// SMITH의 급여는 800입니다.
SELECT '20200331', SUBSTRING('20200331',1,4) AS year			// 20200331	2020	03	31
		, SUBSTRING('20200331',5,2) AS month
		, MID('20200331',7,2) AS day;
SELECT TRIM(' java '), RTRIM(' java '), TRIM(BOTH 'ㅋ' FROM 'ㅋㅋjdbcㅋㅋㅋ');	// java	 java	jdbc

논리 관련 함수

함수기능
IF(논리식, 참일때 값, 거짓일 때 값)논리식이 참이면 참일 때 값을 출력하고 거짓이면 거짓일 때 값을 출력
java 3항연산자와 비슷 (Conditon ? trueCase : falseCase)
IFNULL(값1, 값2)값1이 NULL이면 값2로 대치하고 그렇지 않으면 값1을 출력

논리 관련 구문

	CASE value
	WHEN compare_value THEN result
		[WHEN compare_value THEN result ...]
		[ELSE result] END
	
	CASE
	WHEN condition THEN result
		[WHEN condition THEN result ...]
		[ELSE result] END

날짜 관련 함수

함수기능
NOW(), SYSDATE(), CURRENT_TIMESTAMP()현재 날짜와 시간 출력
CURDATE(), CURRENT_DATE()현재 날짜 출력
CURTIME(), CURRENT_TIME()현재 시간 출력
DATE_ADD(날짜, 기준값)날짜에서 기준 값만큼 더한다
DATE_SUB(날짜, 기준값)날짜에서 기준 값만큼 뺀다
YEAR(날짜)날짜의 연도 출력
MONTH(날짜)날짜의 출력
MONTHNAME(날짜)날짜의 월을 영어로 출력
DAYNAME(날짜)날짜의 요일을 영어로 출력
DAYOFMONTH(날짜)날짜의 월별 일자 출력
DAYOFWEEK(날짜)날짜의 주별 일자 출력 (일 ~ 토 / 1 ~ 7)
WEEKDAY(날짜)날짜의 주별 일자 출력 (월 ~ 일 / 0 ~ 6)
DAYOFYEAR(날짜)일년을 기준으로한 날짜까지의 날 수
WEEK(날짜)일년 중 몇 번째 주
FROM_DAYS(날짜)00년 00월 00일부터 날 수 만큼 경과한 날의 날짜 출력
TO_DAYS(날짜)00년 00월 00일부터 날짜까지의 일자 수 출력
DATE_FORMAT(날짜,’형식’)날짜를 형식에 맞게 출력
TIMESTAMPDIFF(형식, 날짜1, 날짜2)두 날짜 사이의 형식 차이 계산 (형식 : year, month, day, hour, minute, second)
DATEDIFF(날짜1, 날짜2)두 날짜 사이의 일수 차이 계산
-- 소숫점 자리수 까지 출력
SELECT NOW(6), SYSDATE(6) FROM DUAL;		// 2021-12-16 11:18:13.122563	2021-12-16 11:18:13.122619
SELECT ename,	hiredate,	NOW(),			NOW()-hiredate,	DATEDIFF(NOW(), hiredate), 	YEAR(hiredate), MONTH(hiredate), DAY(hiredate) FROM emp;
// 	SMITH 	1980-12-17 	2021-12-16 11:23:02	20211196311085	14974				1980		12		 17
SELECT ename, WEEKDAY(hiredate) FROM EMP;	// SMITH	2
						// 0 : 월 ~ 6 : 일
    
SELECT 
    CASE WEEKDAY(NOW())				// 	오늘의 요일
        WHEN '0' THEN '월요일'			//	목요일
        WHEN '1' THEN '화요일'
        WHEN '2' THEN '수요일'
        WHEN '3' THEN '목요일'
        WHEN '4' THEN '금요일'
        WHEN '5' THEN '토요일'
        WHEN '6' THEN '일요일'
    END AS '오늘의 요일';
    
SELECT DATE_FORMAT(NOW(), "%Y년 %y년");		// 2021년 21년
SELECT DATE_FORMAT('2021-01-03', "%m월 %c월");	// 01월 1월
SELECT DATE_FORMAT('2021-01-03', "%d일 %e일");	// 03일 3일
SELECT DATE_FORMAT(NOW(), "%H시 %h시 %l시");	// 11시 11시 11시
SELECT DATE_FORMAT(NOW(), "%T %r");		// 11:41:43 11:41:43 AM
SELECT NOW(), DATE_ADD(NOW(), INTERVAL 1 MINUTE); // 2021-12-16 11:42:15	2021-12-16 11:43:15
SELECT NOW(), DATE_ADD(NOW(), INTERVAL 1 HOUR);	// 2021-12-16 11:42:27	2021-12-16 12:42:27
SELECT NOW(), DATE_ADD(NOW(), INTERVAL 1 DAY);	// 2021-12-16 11:42:58	2021-12-17 11:42:58
SELECT NOW(), DATE_ADD(NOW(), INTERVAL 1 MONTH);// 2021-12-16 11:43:08	2022-01-16 11:43:08
SELECT NOW(), DATE_ADD(NOW(), INTERVAL 1 YEAR);	// 2021-12-16 11:43:24	2022-12-16 11:43:24
profile
IT 기술블로그

0개의 댓글