내장 함수 내장 함수(제어 함수)
switch문과 유사
query-10(if, 문자열함수).sql
use sqldb;
-- if함수는 '만약에 ~~이라면' 이라는 뜻임.
-- 1000 > 2000 수식의 결과가 참이면, 1번째 인자값을 출력하고,
-- 거짓이면 2번째 인자값이 출력이 된다.
select if(1000 > 2000, '참입니다.', '거짓입니다.');
select if(1000 < 2000, '참입니다.', '거짓입니다.');
-- ifnull은 1번째 인자값에 따라서 널이면 2번째 인자값이 출력되고,
-- 1번째 인자값이 null이 아니면, 1번쨰 값을 출력한다.
select ifnull(null, 'null입니다.');
select ifnull(1000, 'null입니다.');
-- nullif는 두개의 인자값이 같으면 null을 출력하고,
-- 두개의 인자값이 다르면 첫번째 인자값을 출력한다.
select nullif(1000,1000), nullif(1000,2000);
select case 10
when 1 then '일'
when 5 then '오'
when 10 then '십'
when 100 then '백'
else '해당되는 값이 없음'
end;
-- 프로그램 언어에서 switch구문과 유사하다.
-- case 구문은 함수가 아니고 연산자라고 이해를 해야한다.
-- case..when..then..else..end형태의 문법이다.
select case 50
when 1 then '일'
when 5 then '오'
when 10 then '십'
when 100 then '백'
else '해당되는 값이 없음'
end;
-- 문자열 함수
-- ascii 함수 (SQL에서는 하나의 문자도 문자열로 인식한다.)
-- char 함수 : 숫자로 준 내용을 문자로 나타냄.
select ascii('A');
select ascii('B'), char(65);
select char(97);
-- mysql의 문자셋 : UTF-8을 사용.(영문 1바이트, 한글은 3바이트로 사용)
-- select bit_length() : 주어진 문자열의 바이트수 *8에서 비트수를 리턴함.
select bit_length('abc');
select bit_length('가나다'); -- 9 * 8
-- char_length : 문자열의 문자의 수를 출력함.
select char_length('가나다'), char_length('abc');
-- length() 인자값의 바이트 수를 출력함.
select length('안녕하세요');
select length('안녕하세요!');
-- concat() : 문자열을 연결해주는 함수
select concat(100, '은 ', '100과 같다.');
-- concat_ws() : 첫번째 주어진 구분자로 문자열 서로 연결해주는 함수.
select concat_ws('-', '2091년', '01', '11');
-- elt() : 첫번째 주어진 값의 위치로 가서 있는것을 출력하는 함수.
-- 찾는 값이 없다면 null을 리턴.
select elt(2, '일', '이', '삼');
select elt(5, '일', '이', '삼');
-- field() : 첫번째 주어진 값의 위치를 숫자로 출력하는 함수
-- 값이 없으면 0을 리턴.
select field('이', '일', '이', '삼'); -- 2
select field('오', '일', '이', '삼'); -- 0
select field('이', '일이삼'); -- 0
-- find_in_set() : 첫번째 주어진 값의 구분자를 가지고 문자열에 문자위치를 출력해주는 함수
-- 찾는 값이 없으면 0을 리턴.
select find_in_set('이', '일이삼'); -- 0
select find_in_set('이', '일,이,삼'); -- 2
select find_in_set('이', '일', '이', '삼'); -- x
-- instr() : 첫번째 문자열값에서 두번째 값이 있으면 그 위치를 출력.
-- 찾는 값이 없으면 0을 리턴.
select instr('일이삼사', '삼'); -- 3
select instr('일이삼사', '오'); -- 0
-- locate() : 인자값의 위치만 다를 뿐 instr함수와 동일함.
select locate('오', '일이삼사'); -- 0
select locate('일', '일이삼사'); -- 1
-- format() : 엑셀의 round()와 유사함. 소수점자리를 지정해서 반올림 해줌.
-- 1000단위도 구분해준다.
select format(77777.11111, 3); -- 77,777.111
select format(77777.11151, 3); -- 77,777.112
-- 2진수, 16진수, 8진수로 변환해주는 함수
select bin(10), hex(10);
select bin(10), hex(10), oct(10);
-- insert() : replace와 개념이 같다. 2번째 자리부터 3자리를 ???대치하다.
select insert('11111', 2, 3, '???');
-- left() : 왼쪽에서 3자
-- right() : 오른쪾에서 3자를 출력함.
select left('가나다라마', 3), right('가나다라마', 3);
-- 대소문자로 변환해주는 함수.
select lower('ABCabc'), upper('ABCabc');
select lcase('ABCabc'), ucase('ABCabc');
-- 공백을 제거해주는 함수, 왼족공백 제거(ltrim), 오른쪽공백 제거(rtrim)
select ltrim(' 데이터'), rtrim(' 데이터 ');
-- trim() : 앞뒤 공백을 제거하는 함수, 중간에 공백은 제거하지 못한다.
select trim(' 데이터 ');
-- repeat() : 인자수만큼 반복해줌.
select repeat('이순신', 5);
-- replace() : 문자열 치환 함수이다.
select replace('mysql데이터베이스', '데이터', 'data'); -- mysqldata베이스
-- reverse() : 주어진 인자값을 거꾸로 출력함.
select reverse('이순신'); -- 신순이
-- space() : 공백을 만들어준다.
select concat('나의', space(50), '데이터베이스'); -- 나의 데이터베이스
-- substring() : 문자열을 잘라내서 출력.
select substring('데이터베이스', 3, 3); -- 터베이
select substring('데이터베이스', 4, 3); -- 베이스
-- substring_index() : 구분자 .를 기준으로 2번째 이후는 출력하지 않는다.
-- -2를 주었을 경우에는 오른쪽부터 시작해서 2번째 이후는 출력하지 않는다.
select substring_index('데이터베이스.my.sql', '.', 2); -- 데이터베이스.my
select substring_index('데이터베이스/my/sql', '/', 2); -- 데이터베이스/my
select substring_index('데이터베이스/my/sql', '/', -2); -- my/sql