[DBMS] 함수(제어흐름, 문자열, 수학, 날짜 및 시간, 시스템 정보)
[제어흐름 함수]
프로그램의 흐름을 제어한다.
if 함수 : 수식의 진리값에 따른 값 반환
select 컬럼, if(조건, '참일때반환값', '거짓일때반환값') from 테이블;
select bookno, if(bookno>=3,'A','B') as if_result from book;

select bookno, if(bookno=2,'2','else') as if_result from book;

**해당 데이터베이스가 존재하면 삭제한다
drop database if exists sample_DB;
case 함수 : 다중조건을 이용하는 함수
select 컬럼,
case
when (조건1) then 조건1참일때반환값
when (조건2) then 조건2참일때반환값
...
end
as
from 테이블;

select title, author,
case
when(title='E') then 'true'
when(author='EE') then 'true'
else 'false'
end
as case_result
from book;

nullif 함수 : 두 값을 비교하여 같으면 null, 다르면 첫번째 값 반환 *잘사용안함
select nullif(값1, 값2);
select nullif(2, 1); => 2반환
select nullif(1, 1); => null반환
ifnull 함수 : 수식1이 null이면 수식2를 반환하고 그렇지 않으면 수식1 반환
select 컬럼, ifnull(컬럼, 'null일때대체값') from 테이블;
select state, ifnull(state, "No Data") as null_check from customers limit 5;


[문자열 함수]
문자열을 조작하는 함수
concat 함수 : 문자열을 이을 때 사용
select concat('문자열1','문자열2', ...);
select concat('A','B','C');
select concat('2023','07','24') as concat_rs;
select concat('My','SQL');
concat_ws 함수 : 구분자와 함께 문자열을 이을 때 사용
select concat_ws('구분자','문자열1','문자열2', ...);
select concat_ws('/','2023','07','24') as concat_ws_rs;
select concat_ws('-','010','1111','1111');
select concat_ws('-',year(now()),month(now()),dayofmonth(now()));
format 함수 : 숫자를 소수점 아래 자릿수까지 표현
select format(실수,소수점자릿수);
select format(1234.5678,2);
->1234.57
insert 함수 : 기존 문자열의 특정 위치부터 대체할 문자열 입력
select insert('기존문자열', 대체문자열시작위치, 대체문자열길이(개수), '대체할문자열');
select insert('ABCDE',3,3,'@@@'); **3번째부터 3자리대체
->AB@@@
select insert('010-1234-1234',10,4,'####'); **10번째부터 4자리대체
->010-1234-####
left, right 함수 : 해당방향부터 길이만큼 반환
select left('문자열','반환할갯수');
select left('ABCDE',3); **왼쪽부터 3개
->ABC
select right('ABCDE',3); **오른쪽부터 3개
->CDE
trim 함수 : 문자열 양쪽 공백 제거
select trim(' 문자열 ');
select trim(' ABC ');
->ABC
replace 함수 : 기존문자열에서 특정문자열 변경
select replace('기존문자열','바꿀문자열''바뀔문자열');
select replace('It is apple','apple','banana');
->It is banana
select replace('I like JAVA','JAVA','MySQL');
->I like MySQL
space 함수 : 숫자크기만큼 공백생성
space(숫자)
select concat('ab',space(5),'cd');
->ab cd
select concat('I',space(1),'Love',space(1),'MySQL');
->I Love MySQL
substring 함수 : 문자열의 특정위치부터 주어진 길이의 문자열만 반환
substring('기존문자열',위치,길이);
select substring('abcdef',3,2);
->cd
select substring('I Love MySQL',8,5);
->MySQL
substring_index 함수 : 구분자를 기준으로 특정 횟수만큼 구분자가 나오면 그 뒤의 것은 버림
substring_index('기존문자열','구분자',구분자위치);
select substring_index('www.naver.com','.',2);
->www.naver
select substring_index('www.naver.com','.',-2);
->naver.com
select substring_index('2023/07/24','/',2);
->2023/07
select substring_index('root@localhost','@',1);
->root
select substring_index(user(),'@',1);
->root
[수학 함수]
abs 함수 : 절댓값 반환
select abs(-50);
->50
round 함수 : 소수의 반올림값 반환 (소수점 제거)
select round(3.14);
->3
sqrt 함수 : 제곱근 반환
select sqrt(16);
->4
**rand+floor 함수 : 1부터 특정 숫자까지 무작위 반환
floor(1+(rand()*최대값));
select floor(1+(rand()*10))as rs;
[날짜 및 시간 함수]
curdate 함수 : 현재 날짜반환
select curdate();
curtime 함수 : 현재 시간반환
select curdate();
now, sysdate 함수 : 현재 날짜+시간 반환
select now();
select sysdate(); *좀 더 자주사용
datediff, timediff 함수 : 두번째 값에서 첫번째 값까지 얼마나(일자 또는 시간) 남았는지 반환
select datediff('2023-08-01',curdate());
select timediff('24:00:00',curtime());
[시스템 정보 함수]
database, schema 함수 : 현재 사용중인 데이터베이스 이름 반환
select database();
select schema();
found_row 함수 : 마지막으로 실행한 select문 조회데이터 수 반환
select found_rows();
row_count 함수 : 마지막으로 실행한 insert, delete, update 구문 데이터 개수 반환 / 나머지 구문은 0,-1 반환
select row_count();
sleep함수 : 몇초간 쿼리 실행 정지
select sleep(5);
