concat ( A ): concat이라는 함수 안에다가 A안에 속해있는 값을 하나씩 넣어서 모두 처리를 해라는 뜻
; 행 단위로 값을 처리하는 함수
단일 행은 select, where 절에서 사용 가능
→ CHAR_LENGTH(CONCAT(’A’. ‘B’))
: 여러 행의 값들을 묶어서 한번에 처리하는 함수
= 집계함수, 그룹함수
다중행은 select, having 절에서 사용 가능
→ where 절에서는 사용 불가(sub query 이용)
ex)
select char_length('가나다라마'); -- 글자수 밭환
select * from emp;
select char_length(emp_name) >= 7; # emp_name을 통째로 넣는것이 아니라 그 안에 있는 하나의 값을 넣는 것
select char_length(emp_name) from emp; #result set 에는 이게 들어가 있음
select upper('abcDEFgh'), lower('abcDEFgh');
select format(123456789, 0); -- 자리구분자를 넣을 숫자, 반올림할 자릿수 # 현재 0의 위치를 이야기 함(자릿수 넣는것은 필수)
select format(123456789.987654, 2);
select format(123456789.987654, 0); -- 0은 소수점 이하에서 반올림
select concat('홍길동', '님');
select concat ('나이:', 20, '세'); -- 어떤 값을 넣든간에 문자열로 다 붙여버림
select insert('123456789', 2, 3, '안녕'); -- 두번째 글자부터 3글자를 '안녕'으로 변경
select replace('123456789', 234, '안녕'); -- '234'문자열을 '안녕'으로 변경
select substring('1234567890', 4, 2); -- 4번째 글자부터 두글자 나머지를 반환
select substring_index('aaa-bbb-ccc-ddd-eee', '-', 3);
-- 문자열을 '-' 구분자를 기준으로 나눈 뒤 앞에서 3개를 반환
select substring_index('aaa-bbb-ccc-ddd-eee', '-', -3);
-- 개수: 음수 => 뒤에서 부터 3개를 반환
select left('1234567890', 5); -- 왼쪽에서 5글자 반환
select right('1234567890', 5); -- 오른쪽에서 5글자 반환
select trim(' aaaa '), char_length(trim(' aaaa ')); -- 좌우 공백 제거=> trim 하고 난 글자수 츶정
select rtrim(' aaaa ') as "b";
select ltrim(' aaaa ') as "b";
select trim(both '-' from '-------aaaa--------') as "b"; -- 여기서의 '-' 이것이 꼭 한글자일 필요는 없다
-- 어디에 있는것 지울 문자열 from 대상
select trim(leading '-+' from '-+-+-+-+-+-+-aaaa-+-+-+-+-+-+-+-') as "b"; -- 앞에 있는 것만
select trim(trailing '-+' from '-+-+-+-+-+-+-aaaa-+-+-+-+-+-+-+-') as "b"; -- 뒤에 있는 것만
select lpad('test', 10,' ') as 'b'; -- 자릿수를 맞춰주고 싶을 때 사용
-- 10글자로 맞출 때 값이 모자란 경우 왼쪽에 '공백'을 붙인다
select rpad('test', 10,' ') as 'b'; -- -- 10글자로 맞출 때 값이 모자란 경우 오른쪽에 '공백'을 붙인다
select rpad('test', 10,' '), char_length(rpad('test', 10,' ')) as 'b'; -- 자릿수 10개 확인
select lpad(3,2,'0');
select rpad('aaaaaaaaaaaaaa', 3, ''); -- 모자라면 채우고, 넘치면 버린다
ex)
select abs(10), abs(-10); -- 절댓값 반환
select round(1.23456); -- 소숫점 이하에서 반올림
select round(1.6789, 2); -- 소숫점 2자리 이하에서 반올림
select round(189.123, -1); -- 0이 소숙점 이하에서 반올림이므로 -는 이제 반대로 올라가는 것 # 자리: 음수 -> 정수 위치
select ceil(50.99999); -- 내림(소수점 아래 정수만 반환)
select floor(50.99999); -- 내림(소수점 위 정수만 반환)
select truncate(1234.567, 2); -- 절삭(내림- 잘라서 뒤는 버린다고 생각) -> 자짓수 지정
select truncate(1234.567, -1); -- 얘도 음수는 정수자리로 이동
select sign(-10), sign(0), sign(10); -- 부호를 return
날짜 연산
SELECT date_format (now(), ‘%Y 년 %m 월 %d 일→ 참고 링크 (mysql)
https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html

→ 토요일이 1이 아니라 6 ( *오타 )
ex)
-- 실행 시점의 일/시를 조회 함수
select now(); -- 일시 -> datetime
select curdate(); -- 낭짜 -> date
select curtime(); -- 시간 -> time
-- 날짜 타입에서 년 월 일 조회
select year(now()), month(now()), day(curdate());
-- 시간 타입에서 시 분 초 조회
select hour(now()), minute(curtime()), second(curtime()), microsecond(now());
select date(now()); -- datetime -> date
select time(now()); -- datetime -> time
-- 날짜 연산
select adddate(now(), interval 2 day);
select adddate(now(), interval 2 month);
select adddate(now(), interval 2 year);
select adddate(now(), interval 2 quarter); -- 2 분기 후 => 6개월 후
select subdate(now(), interval 2 year); -- 2년 전
select adddate(now(), interval -2 year); -- 2년 전
select adddate(curtime(), interval 10 hour);
select adddate(curtime(), interval 10 minute);
select datediff(curdate(), '2023-08-30'); -- curdate: 오늘 날짜에섭 투터 2023/8/30 일수 차이
select datediff('2023-08-30', curdate()); -- 앞에 날짜가 과거일 경우 해당하는 날짜 만큼의 음숙 나온다
select timediff(curtime(), '11:20:10'); -- curtime - '11:20: 10' 차이가 나는 시간 분 초를 반환한다
select dayofweek(now()); -- 해당하는 실행 시점의 요일을 반환(1: 일요일 ~ 7: 토요일)
select date_format(now(), '%Y년 %m월 %d일 %h시 %i분 %s초 %p %w');
select date_format(curdate(), '%m/%d/%y %w');
ex)
select ifnull(null, "없음"); -- select 시 그 행의 column이 없는 경우
select ifnull(comm_pct, 'no commisision') from emp;
-- 조건연산자 기능 함수
select salary, if(salary > 10000, '평균이상', '평균미만') from emp; -- 조건 연산자라고 생각 가능
select nullif(10, 10); -- 두 값이 같으면 null 반환
select nullif(100, 1); -- 두 값이 다르면 앞의 값을 반환
-- ex) nullif(2022년 판매개수, 2021년 판매개수)
select coalesce(null, null, 10, 20, 30); -- 값이 나열 되었을 때 null 이 아닌 첫번 째 값이 return
CASE 문
case문 동등비교
case 컬럼 when 비교값 then 출력값
[when 비교값 then 출력값]
[else 출력값]
end
if dept_name==null:
return '부서없음'
elif dept_name=='IT':
return '전산실'
elif dept_name=='Finance':
return '회계부'
else:
return dept_name
case 절은 where 절과 select 절 모두에 사용 가능
ex)
select case dept_name when 'IT' then '전산실'
when 'Finance' then '회계부'
when 'Sales' then '영업부'
else dept_name -- 원래 값을 return 해라
end as "부서명"
from emp; -- case문은 끝났다는 의미로 end를 붙여줘야 함
-- 마지막에 order by 1;를 추가해서 정렬 가능
-- else dept_name 에서 else ifnull(dept_name, '부서 없음') 으로 변경 시
--> 원래 값을 return 하고 null이라면 부서 없을을 return
case문 조건문
case when 조건 then 출력값
[when 조건 then 출력값]
[else 출력값]
end
ex)
-- EMP테이블에서 급여와 급여의 등급을 조회 할 때,
-- 급여 등급은 10000이상이면 '1등급', 10000미만이면 '2등급' 으로 나오도록 조회 할 경우
select salary,
case when salary >= 10000 then '1등급'
when salary < 10000 then '2들급'
end "salary 등급",
case when salary >= 10000 then '1등급'
else '2등급'
end "salary 등급"
from emp;
– select ‘1000’ + ‘2000’; 문자열 ‘1000’, ‘ 을 정수로 변환 후 더한다 – select concat (322, 개 ’); 322 정수를 문자열로 변환한 뒤 붙인다ex)
select '1000' + '2000';
select curdatre() + 10;
select convert(curdate(), signed);
select convert (20130901, date);
select convert (102030, time);
-- 위와 값은 역할 하는 함수 cast
select cast(102030 as time);