이름이 Smith인 사람을 찾는다고 해보자.
데이터베이스에 저장된것이 대문자로 되어있는 정보라면, 스미스 이름을 대문자로 바꾸어 찾으면 된다.
소문자 : LOWER()
대문자 : UPPER()
select employee_id, last_name, department_id
from employees
where LOWER(last_name) = 'higgins';

concat('hello','world')
-> helloworld
substr('helloworld', 1,5)
-> hello


A부터 B까지 잘라라.
어디까지인지 명시되어있지 않다면 끝까지이다.
select employee_id, CONCAT(first_name, last_name) NAME,
job_id, LENGTH(last_name), INSTR(last_name, 'a') "Contains 'a'?"
from employees
where substr(job_id, 4) = 'REP';

(* DUAL : 함수 및 계산 결과를 볼 수 있는 더미 테이블)
RR/MM/DD
RR : Y2K가 적용된 숫자연도 두 자리
MM : 숫자 월 두 자리
DD : 숫자 날짜 두 자리
MON : 월이름(축약된) -> Jan
MONTH : 월이름(전체) -> January
대한민국 오라클에서는 날짜는 기본적으로 rr/mm/dd
select sysdate from dual;

-8월 1일에서 가장 가까운 금요일은 언제인가?
SELECT next_day('22/8/1','금') from dual;

-입사한지 3년이 안된 사원들의 사원번호, 입사일, 근무한 달 수, 6개월 검토일(6개월이 지난 다음에 정직원으로 채용할지, 임시직원으로 채용할지, 해고할지에 해당하는 날이 언제인가?), 입사 후 첫번째 금요일, 입사한 달의 마지막 날을 표시하라.
select employee_id, hire_date,
MONTHS_BETWEEN (Sysdate, hire_date) TENURE,
add_months (hire_date, 6) REVIEW,
next_day (hire_date, '금'), Last_day(hire_date)
from employees
where months_between (sysdate, hire_date) < 240;
개월을 찾아야하므로 MONTHS_BETWEEN사용
(SYSDATE(오늘), hire_date) < 36; : 오늘 날짜부터 입사한 날까지 36개월이 안된)

(여기서잠깐!)
나는 이 코드를 입력하고 아무리 friday며 FRIDAY며 금요일 금 입력해도 안됐었는데, 이 때 윈도우 10cmd한글 깨짐 이라고 검색하여 cmd창에
chcp 949
를 입력하여 해결하였다.(뿌듯)
그리고 friday를 금 으로 입력하여 출력하였다.
183p.
1번 2번 3번은 같은 문제이고,
4번은 2번문제를 수정해서 다음과 같은 결과가 출력되도록 바꿔라
5번은 대문자 j,a,m 이름과 길이를 출력해라
6번 근무달 수 결과는 반올림으로
까지 풀기
(문자,숫자,날짜 함수)
1)현재 날짜를 표시하는 질의를 작성하고 열 레이블을 date로 지정할 것.
select sysdate "date" from dual;

해설.현재 날짜(시간포함)를 출력하는 함수 : sysdate
2-3)각 사원에 대해 사원 번호, 이름, 급여 및 15% 인상된 급여를 정수로 표시하여라. 인상된 급여열의 레이블을 New Salary로 지정하여라.
select employee_id, last_name, salary, round(salary+(salary*1.15),0) "New Salary"
from employees;

해설. 15%인상된 급여를 정수로 출력
1. 15% 인상된 급여(salary1.15)->정수로 출력(반올림, 버림)
2. round(salary1.15,0)
4)새 급여에서 이전 급열르 빼는 새 열을 추가하고 레이블을 Increase로 지정하여라.
select employee_id, last_name, salary, round(salary * 1.15,0) as "new salary",
round(salary * 1.15,0)-salary as "increase" from employees;

5)이름이 j,a,m으로 시작하는 모든 사원의 이름(첫 글자는 대문자로, 나머지 글자는 소문자로 표시) 및 이름 길이를 표시하는 질의를 작성하고, 각 열에 적합한 레이블을 지정하시오. 결과를 사원의 이름에 따라 정렬하시오.
select first_name as "Name", length(first_name) as "Length"
from employees
where first_name like 'J%' OR first_name like 'A%' or first_name like 'M%'
order by first_name asc;
다른 방식으로는,
select first_name as "Name", length(first_name) as "Length"
from employees
where substr(last_name, 1, 1) in('J','A','M')
order by first_name;


해설. 조건 : 이름이 J,A,M으로 시작하는 사원
->이름이 J로 시작 -> last_name like 'J%'
->이름의 길이 : length(last_name)
p.s.작성자의 한마디)
first name이랑 last name 항상 헷갈리는거 나만그래?
아무튼, first name이 이름이고, last name이 성이야~!😉
XOXO 작성자
6)각 사원의 이름을 표시하고 근무 달 수(입사일로부터 현재가지의 달 수)를 계산하여 열 레이블을 months_worked로 지정하시오. 결과는 정수로 반올림하여 표시하고 근무 달수를 기준으로 정렬하시오.
select last_name, round(months_between(sysdate, hire_date)) "근무 달 수"
from employees
order by round(months_between(sysdate, hire_date));

해설. 근무 달수(입사일 부터 현재까지 달 수) : months_between(A,B)
round(months_between(sysdate, hire_date))