내장함수(Built_in function) - 데이터 아이템 조작의 효율성 증진
단일 행 함수 : 각 행 단위로 함수 결과가 진행
문자 함수
SELECT LOWER('Hello') -- 소문자
, UPPER('Hello') -- 대문자
, CONCAT('Hello','World') FROM DUAL; -- 문자열 합치기
SELECT SUBSTR('Hello World',3) -- 3번째 부터 다나오기
,SUBSTR('Hello World',3,2) -- 3번째 부터 두글자
,SUBSTR('Hello World',-3,2); -- 뒤에서 3번째부터 두글자
SELECT LENGTH('Hello World') -- 글자수
,INSTR('Hello World','e'); -- e가 몇번째에 나오는 지
SELECT LOCATE('o','Hello World'), -- 처음부터 글자 찾기
LOCATE('o','Hello World', 6); -- 6번째부터 글자 찾기
SELECT TRIM(' aabb bbaa ') -- 문자열 양쪽 의미 없는 공백 자르기 / 가운데는 의미 있는 공백
,LTRIM(' aabb bbaa ') -- 왼쪽 자르기
,RTRIM(' aabb bbaa ') ; -- 오른쪽 자르기
SELECT REPLACE('010.111.1234','.','-'); -- . -> - 점을 하이픈으로 대체
문제 : 직원 테이블에서 이름에 '이'가 포함된 직원이 있으면 '이'부터 두 글자만 출력. 마지막에 '이'가 있으면 '이' 한 글자만 출력
SELECT jikwon_name, SUBSTR( jikwon_name, INSTR( jikwon_name, '이'),2) FROM jikwon WHERE jikwon_name LIKE '%이%' ;
숫자 함수
SELECT ROUND(45.6789), -- 정수로 반올림
ROUND(45.6789, 0), -- 정수로 반올림
ROUND(45.6789, 2), -- 소수 둘째자리까지 반올림
ROUND(45.6789, -1); -- 1의 자리에서 반올림
SELECT CEILING(4.7), -- 올림
FLOOR(4.7); -- 버림
SELECT jikwon_name, jikwon_pay, ROUND(jikwon_pay *0.025,0) AS tex FROM jikwon;
SELECT TRUNCATE(45.5789,0), TRUNCATE(45.5789,1), TRUNCATE(45.5789,-1); -- 소수점을 기준으로 절삭
SELECT MOD(15, 2), 15 %2, 15 MOD 2; -- 3개다 나머지
날짜 함수
SELECT NOW(), SYSDATE(), CURDATE(), CURRENT_DATE() + 0; -- 마지막은 숫자로 표현됨
SELECT ADDDATE('2023-7-24', 3), SUBDATE('2023-7-24',3), ADDDATE('2023-7-24',3); -- 윤년 체크됨
-- SUBDATE() 날짜 빼기 / ADDDATE() 날짜 더하기
SELECT NOW(), DATE_ADD(NOW(),INTERVAL 3 MINUTE); -- 분 더하기
SELECT DATE_ADD(NOW(),INTERVAL 5 DAY); -- 일 더하기
SELECT DATE_ADD(NOW(),INTERVAL 2 MONTH); -- 달 더하기
SELECT NOW(), DATE_SUB(NOW(),INTERVAL 3 YEAR); - 년 빼기
SELECT NOW(), DATE_SUB(NOW(),INTERVAL -3 YEAR);
SELECT DATEDIFF(NOW(), '2023-7-7'), DATEDIFF(NOW(),'2030-7-7'); -- 날짜 차이
SELECT TIMESTAMPDIFF(HOUR,'2022-1-1',NOW()), -- 날짜 차이
TIMESTAMPDIFF(QUARTER,'2022-1-1',NOW()); -- 분기 차이
date_format : 날짜형 자료 서식을 이용해 날짜를 문자열로 출력
SELECT DATE_FORMAT(NOW(), '%Y%m%d')AS a, DATE_FORMAT(NOW(), '%Y-%m-%d %H시%i분 %s초') AS b;
SELECT DATE_FORMAT(NOW(), '%d'), DATE_FORMAT(NOW(), '%'), DATE_FORMAT(NOW(), '%a'), DATE_FORMAT(NOW(), '%W');
SELECT jikwon_name, jikwon_ibsail, DATE_FORMAT(jikwon_ibsail, '%W') FROM jikwon;
STR TO DATE : 문자를 날짜형식으로 변환, oracle의 TO_DATE()와 유사
SELECT STR_TO_DATE('2023-3-12','%Y-%m-%d');
숫자 format 함수
SELECT FORMAT(1234.567, 2),FORMAT(1234.567, 0),LPAD(56,7,0), RPAD(56,7,0) ;
format(a,b) : b자리만큼 소수 없애기, LPAD(a,b,c) : a의 왼쪽을 b만큼 c로 채우기, RPAD(a,b,c) : a의 오른쪽을 b만큼 c로 채우기