[22.11.28] 26일차 [데이터베이스] 단일행함수

W·2022년 11월 28일
0

국비

목록 보기
36/119
함수
ASCII(아스키코드)문자의 아스키 코드값을 반환해 주는 함수
CHAR(숫자)숫자의 아스키 코드값을 반환해 주는 함수
LENGTH(문자열)문자열의 byte 수를 반환해 주는 함수
BIT_LENGTH(문자열)할당된 bit 크기 또는 문자 크기를 반환해 주는 함수
CHAR_LENGTH(문자열)문자의 개수를 반환해 주는 함수
CONCAT(문자열1, 문자열2, ...)문자열을 연결해 주는 함수
CONCAT_WS(구분자, 문자열1, 문자열2, ...)구분자와 함께 문자열을 연결해 주는 함수
INSTR(기준 문자열, 부분 문자열)기준 문자열에서 부분 문자열의 시작 위치값을 반환해 주는 함수
UPPER(문자열)문자열을 대문자로 변환해 주는 함수
LOWER(문자열)문자열을 소문자로 변환해 주는 함수
LEFT(문자열, 길이)왼쪽에서 문자열의 길이만큼 반환해 주는 함수
RIGHT(문자열, 길이)오른쪽에서 문자열의 길이만큼 반환해 주는 함수
LPAD(문자열, 길이, 채울 문자)문자열을 길이만큼 늘린 후 빈곳을 왼쪽부터 채울 문자로 채워주는 함수, 오른쪽 정렬 함수
RPAD(문자열, 길이, 채울 문자)문자열을 길이만큼 늘린 후 빈곳을 오른쪽부터 채울 문자로 채워주는 함수, 왼쪽 정렬 함수
LTRIM(문자열)문자열의 왼쪽 공백을 제거해 주는 함수
RTRIM(문자열)문자열의 오른쪽 공백을 제거해 주는 함수
TRIM(문자열)문자열의 앞/뒤 공백을 제거해 주는 함수
TRIM(방향 자를문자열 FROM 문자열)방향 : leading(앞), trailing(뒤), both(양쪽) 문자열로부터 해당 방향의 자를 문자열을 제거해주는 함수
REPLACE(문자열, 기존문자열, 바꿀문자열)문자열에 기존 문자열을 바꿀 문자열로 교체해 주는 함수
SPACE(길이)길이만큼의 공백을 반환해 주는 함수
SUBSTR(문자열, 시작위치, 길이)문자열의 일부분을 반환해 주는 함수

연습문제

use hr;

  1. employees 테이블로부터 사원들의 last_name과 last_name의 길이를 출력하되 last_name이 ‘J’, ‘A’, ‘M’으로 시작되는 사원만 출력하시오. 또한 last_name을 기준으로 오름차순 정렬해서 출력하시오.
select last_name as "Name", char_length(last_name) as "Length"
from employees
where last_name like 'J%' or   last_name like 'A%' or  last_name like 'M%'
order by last_name;
-- (==)
select last_name as "Name", char_length(last_name) as "Length"
from employees
where substr(last_name,1,1) in ('j', 'm', 'a')
order by last_name;
  1. employees 테이블로부터 사원들의 last_name과 salary를 출력하되 특히 급여는 15자리로 표시하고
    왼쪽부터 $ 기호가 채워지도록 지정하시오.
select last_name, lpad(salary, 15, '$') as "SALARY"
from employees;

단일행 함수 - 숫자함수, 날짜함수

1. 숫자함수

함수
ROUND(숫자, 반올림할 자리)숫자를 반올림할 자리까지 반올림을 해주는 함수 반올림할 자리 생략 시 일의 자리로 반올림함
TRUNCATE(숫자, 버림할 자리)숫자를 버림할 자리까지 남기고 버림을 해주는 함수

(반올림, 버림할 숫자) 1 2 3. 4 5 6
(반올림, 버림할 자리) -2 -1 0 1 2 3

select round(45.923, 2), round(45.923, 0), round(45.923, -1);


round(45.923, 0) = round(45.923)

select truncate(45.923, 2), truncate(45.923, 0), truncate(45.923, -1);

함수
CEIL(숫자)숫자보다 크거나 같은 최소의 정수를 반환해 주는 함수
일의 자리로 올림을 해주는 함수
FLOOR(숫자) = truncate(숫자,0)숫자보다 작거나 같은 최소의 정수를 반환해 주는 함수
일의 자리까지 버림을 해주는 함수
select ceil(45.923), ceil(52.1);

select floor(45.923), floor(52.1);

함수
MOD(숫자1, 숫자2)숫자1을 숫자2로 나눈 나머지를 반환해 주는 함수
select mod(157, 10), 157 mod 10, 157 % 10, 157 / 10;

** 값이 짝수인지 홀수인지를 확인하는 용도로도 활용됨.

함수
ABS(숫자)숫자의 절대 값을 반환해 주는 함수
select abs(-5), abs(5), abs(-4.5);

함수
POWER(숫자, 제곱값)
POW(숫자, 제곱값)
숫자의 제곱 값을 계산하여 반환해 주는 함수
select power(4, 1), power(4, 2), power(4, 3), power(4, 4), power(4, 5);

함수
SIGN(숫자)숫자가 양수이면 1, 음수이면 –1, 0이면 0을 반환해 주는 함수
select sign(3), sign(-3), sign(4.26), sign(-4.26), sign(0);

2. 날짜함수

함수
NOW( )
SYSDATE( )
CURRENT_TIMESTAMP( )
현재 날짜와 시간을 반환해 주는 함수(년/월/일/시/분/초)
select now(), sysdate(), current_timestamp();

함수
CURRENT_DATE( )
CURDATE( )
현재 날짜를 반환해 주는 함수(년/월/일)
CURRENT_TIME( )
CURTIME( )
현재 시간을 반환해 주는 함수(시/분/초)
select current_date(), current_time();

함수
YEAR(날짜)날짜/시간에서 년도를 반환해 주는 함수
MONTH(날짜)날짜/시간에서 월을 반환해 주는 함수
DAY(날짜)
DAYOFMONTH(날짜)
날짜/시간에서 일을 반환해 주는 함수
HOUR(시간)날짜/시간에서 시간을 반환해 주는 함수
MINUTE(시간)날짜/시간에서 분을 반환해 주는 함수
SECOND(시간)날짜/시간에서 초를 반환해 주는 함수
select year(now()), month(now()), day(now()), hour(now()), minute(now()), second(now());

select last_name, hire_date, year(hire_date), month(hire_date), day(hire_date)
from employees
where department_id = 90;

함수
DATE(날짜와 시간)날짜/시간에서 날짜를 반환해 주는 함수(년/월/일)
TIME(날짜와 시간)날짜/시간에서 시간을 반환해 주는 함수(시/분/초)
select date(now()), time(now());

함수
ADDDATE(날짜, 차이)
DATE_ADD(날짜, 차이)
날짜에서 차이를 더한 날짜를 반환해 주는 함수
SUBDATE(날짜, 차이)
DATE_SUB(날짜, 차이)
날짜에서 차이를 뺀 날짜를 반환해 주는 함수
select adddate('2022-01-01', interval 35 day),
adddate('2022-01-01', interval 2 month),
date_add('2022-01-01', interval 1 year);

select subdate('2022-01-01', interval 35 day), 
subdate('2022-01-01', interval 2 month), 
date_sub('2022-01-01', interval 1 year);

select last_name, hire_date, adddate(hire_date, interval 6 month) as "입사 6개월 후",
subdate(hire_date, interval 7 day) as "입사 7일전"
from employees
where department_id = 60;

함수
ADDTIME(날짜와 시간, 시간)날짜/시간에서 시간을 더한 결과를 반환하는 함수
SUBTIME(날짜와 시간, 시간)날짜/시간에서 시간을 뺀 결과를 반환하는 함수
select addtime('2022-01-01 23:59:59', '1:1:1'), addtime('15:00:00', '2:10:10');

select subtime('2022-01-01 23:59:59', '1:1:1'), subtime('15:00:00', '2:10:10');

함수
DATEDIFF(날짜1, 날짜2)날짜1 - 날짜2를 반환하는 함수
TIMEDIFF(시간1, 시간2)시간1 – 시간2를 반환하는 함수
select datediff('2022-12-31', now()), datediff(now(), '2022-12-31');

select timediff('23:23:59', '12:11:10'), timediff('12:11:10', '23:23:59');

select last_name, hire_date, datediff(now(), hire_date) as "근무한 일수"
from employees;

함수
DAYOFWEEK(날짜)날짜의 요일을 반환해 주는 함수
(1-일, 2-월, 3-화, 4-수, 5-목, 6-금, 7-토)
MONTHNAME(날짜)날짜의 월의 영문 이름을 반환해 주는 함수
DAYOFYEAR(날짜)날짜가 1년 중 몇 번째 날짜인지를 반환해 주는 함수
select dayofweek(now()),monthname(now()), dayofyear(now());

select employee_id, last_name, hire_date, monthname(hire_date)
from employees;

함수
LAST_DAY(날짜)날짜가 속한 월의 마지막 날짜를 반환하는 함수
주로 그 달이 몇일까지 있는지 확인할 때 사용함
select last_day('2022-04-03');

select employee_id, last_name, hire_date, last_day(hire_date)
from employees;

함수
QUARTER(날짜)날짜가 4분기 중에서 몇 분기인지를 반환하는 함수
 select quarter('2022-01-31'),
 quarter('2022-04-02'),  
 quarter('2022-07-10'), 
 quarter('2022-10-14');

연습문제

  1. employees 테이블로부터 전 사원의 employee_id, last_name, salary를 출력하고 마지막 컬럼에는 15.5% 인상된 급여(일의 자리에서 반올림)를 New salary라는 제목으로 출력하는 구문을 작성하시오.
select employee_id, last_name, salary, round(salary*1.155,0) as "New Salary"
from employees;

  1. employees 테이블로부터 사원들의 employee_id, last_name, salary, 15.5% 인상된 급여(New Salary), 새 급여에서 이전 급여를 뺀 값(Increase)을 출력하는 구문을 작성하시오. (단, 4번째, 5번째 컬럼은 일의 자리에서 반올림하여 정수로 표현하시오.)
select employee_id, last_name, salary, round(salary*1.155,0) as "New Salary", 
round(salary*1.155,0) - salary as "Increase"
from employees;
--(==)
select employee_id, last_name, salary, round(salary*1.155,0) as "New Salary", 
round(salary*0.155,0) as "Increase"
from employees;

  1. employees 테이블로부터 2월에 입사한 사원들의 employee_id, last_name, job_id, hire_date, department_id를 출력하시오.
select employee_id, last_name, job_id, hire_date, department_id
from employees
where month(hire_date) = 2;

  1. employees 테이블로부터 1990년부터 1995년에 입사한 사원들의 employee_id, last_name, hire_date, salary, department_id를 출력하시오.
select employee_id, last_name, hire_date, salary, department_id
from employees
where year(hire_date) between 1990 and 1995;

  1. employess 테이블로부터 오늘 날짜를 기준으로 근무한 주수가 1200주 미만인 사원들의 last_name, hire_date, 근무한 일수, 근무한 주수를 출력하는 구문을 작성하시오.
select last_name, hire_date, datediff(now(), hire_date) as "근무한 일수", 
floor(datediff(now(), hire_date)/7) as "근무한 주수"
from employees
where datediff(now(), hire_date)/7 <1200;                                     

  1. employees 테이블로부터 전 사원들의 employee_id, last_name, hire_date, 입사한 날짜에 해당되는 분기를 출력하는 구문을 작성하시오.
    특히 입사한 날짜에 해당되는 분기를 출력해야하는 4번째 컬럼은 예를 들어 입사일이 2000-05-05인 경우 2분기라고 출력될 수 있도록 작성하시오.
select employee_id, last_name, hire_date, concat(quarter(hire_date),'분기') as "입사한 분기"
from employees;

  1. employees 테이블로부터 last_name과 급여 액수를 별표(*)로 나타내는 query를 작성하시오. 각 별표는 $1,000를 의미하며 백단위 이하는 표시하지 않습니다. 또한 급여의 내림차순으로 데이터를 정렬하여 출
    력하고 컬럼 제목(column alias)을 EMPLOYEES_AND_THEIR_SALARIES로 지정하시오.
select concat(last_name,' ', lpad('',floor(salary/1000),'*')) as "EMPLOYEES_AND_THEIR_SALARIES"
from employees                         order by salary desc;

rpad, lpad 함수는 두번째 인수가 실수인 경우 자동 반올림함!

0개의 댓글