XEPDB1 사용자이름에 입력하고 들어가는건 복사본 pdb서버로 들어간다는것을 뜻함
2. 함수
* substr('문자', 이숫자 부터, 이숫자번 출력 7이면 5번쨰부터 문자7번출력
*lpad(17600, 10 , '*') >> 10자리를 출력할건데 문자가 부족하면 왼쪽에는다 *로 채운다 >>*****17600 출력
*rpad 는 오른쪽으로 작용
select * from employees where lower (first_name) = 'ellen'; <<이렇게한다고해서 이름이 소문자로 바뀌는건 아님 소문자로 바꿨을경우 라는느낌으로 해석XEPDB1 사용자이름에 입력하고 들어가는건 복사본 pdb서버로 들어간다는것을 뜻함
2. 함수
* substr('문자', 이숫자 부터, 이숫자번 출력 7이면 5번쨰부터 문자7번출력
*lpad(17600, 10 , '*') >> 10자리를 출력할건데 문자가 부족하면 왼쪽에는다 *로 채운다 >>*****17600 출력
*rpad 는 오른쪽으로 작용
select * from employees where lower (first_name) = 'ellen'; <<이렇게한다고해서 이름이 소문자로 바뀌는건 아님 소문자로 바꿨을경우 라는느낌으로 해석
--
--문자조작 함수
--dual은 가상테이블
--loweer, upper, initcap
select 'hello world' from dual;
select lower('LAa'), upper('hello WORLD'), initcap('hellow WORLD') from dual;
select lower (first_name), upper(last_name), initcap(first_name) from employees;
--함수는 where조건절에도 들어갑니다.
select * from employees where lower (first_name) = 'ellen';
--length() 문자열 길이, instr() 문자열 찾기
select length('abcdef'), instr('abcfee', 'f') from dual;
select first_name, length(first_name), instr(first_name, 'a') from employees;
--concat() 문자열 붙이기, substr()문자열 자르기
select concat ('hello', 'world') from dual;
select concat(concat('hello', ' '), 'world') from dual;
select 'hello' || 'world' from dual;
select substr('abcdef', 2, 5) from dual;
select first_name,
concat (first_name, last_name),
substr (first_name, 1,3)
from employees;
--lpad, rpad 좌,우측 지정된 문자열로 채우기
select lpad('abc', 10, '*') from dual;
select rpad('abc', 10 , '*') from dual;
--ltrim, rtrim, trim
select ltrim('aabbcaa' , 'a') from dual;
select rtrim('aabbcaa' , 'a') from dual;
select trim(' hello world') from dual;
--replace (문자열 치환)
select replace('my dream is president', 'resident', 'teacher') from dual;
select replace('my dream is president', ' ', '') from dual; -- 모든 공백 제거!
select replace(replace('my dream is president', 'resident', 'teacher'), ' ', '') from dual;
select replace(concat(first_name, last_name),' ','') from employees;
--
select * from employees;
select concat('first_name','last_name') as name ,replace(hire_date, '/','')
from employees order by name asc;
select concat('02',substr( phone_number, 4,9)) from employees;
select rpad(first_name,10,'*') , lpad(salary,10,'*') from employees where lower(job_id)='it_prog';
--
--숫자 함수
select 45.923 from dual;
select round (45.923,2) , round(45.923) , round(45.923,0), round(45.923, -1) from dual;
--trunc절삭
select trunc(45.312,1) from dual;
--abc절대값
select abs(-34) from dual;
--ceil (올림), floor(내림)
select ceil(3.14), floor(3.14) from dual;
--mod (나머지)
select 10 / 2, mod(10,2) from dual;
--
하나 어따저장했는지 날렸음 찾으면 등록함
select * from employees;
select concat('first_name','last_name') as name ,replace(hire_date, '/','')
from employees order by name asc;
select concat('02',substr( phone_number, 4,9)) from employees; --9대신 length(폰넘버)도 가능
select rpad(first_name,10,'*') , lpad(salary,10,'*') from employees where lower(job_id)='it_prog';
--숫자 함수
select 45.923 from dual;
select round (45.923,2) , round(45.923) , round(45.923,0), round(45.923, -1) from dual;
--trunc절삭
select trunc(45.312,1) from dual;
--abc절대값
select abs(-34) from dual;
--ceil (올림), floor(내림)
select ceil(3.14), floor(3.14) from dual;
--mod (나머지)
select 10 / 2, mod(10,2) from dual;
--날짜
select sysdate from dual;
--시분초까지 (뒤에 +는 세계시간표기준으로 얼마나 빠르고느린지를 보여주는것임)
select systimestamp from dual;
--trunc의 활용
select trunc(sysdate,'month') from dual; -- 1일로바뀜
select trunc(sysdate,'year') from dual; -- 1월 1일로바뀜
--날짜도 연산이 가능하다
select sysdate - '05/31/31' from dual; -- /7 or /365
--날짜에도 trunc , round 적용이 가능합니다.
select round(sysdate) from dual;
--dat 일월화수목금토 을 1234567로 생각
select round(sysdate, 'day') from dual;
select round(sysdate, 'month') from dual;
select trunc(sysdate) from dual;
select trunc(sysdate, 'year') from dual;
select trunc(sysdate, 'month') from dual;
select trunc(sysdate, 'day') from dual; --해당주의 일요일로 변경
select * from employees where salary = '14000'; -- 이런경우 자동형변환 해줌
select first_name, TO_char(hire_date, 'MM/YY') as 날짜
from employees;
select first_name,
to_char(hire_date, 'YYYY"년" MM"월" DD"일"') hiredate -- 포맷형식 안에 표현할문자는 "" 로써준다
from employees;
--
--형 변환 함수 TO_CHAR, TO_DATE, TO_NUMBER
--TO_CHAR (날짜, 날짜형식) - (날짜를 문자로)
select to_Char(sysdate) from dual;
select to_char(sysdate, 'YY-MM-DD') from dual; -- -,/,: 은 포맷형식으로 사용가능 < ""필요없단 말임
select to_char(sysdate, 'YY-MM-DD HH:MI:SS') from dual;
select to_char(sysdate, 'YYYY"년"') from dual;
select first_name, hire_date from employees;
select first_name, to_char(hire_date, 'YYYY-MM-DD') from employees;
select first_name, to_char(hire_date, 'YY-MM-DD HH24:MI:SS') from employees;
select first_name, to_char(hire_date, 'YYYY"년" MM"월" DD"일"') from employees;
--to_Char(숫자,숫자형식) -숫자를 문자로
select to_char(20000, '99999') from dual; --9는 자리수
select to_char(20000, '999') from dual; --자리수 부족은 표현이 안됩니다.
select to_char(20000.14, '00000.99') from dual; -- .은 소수점 자리를 의미
select to_char(20000,'L99,999') from dual; -- L은 각나라의 원화기호 , $붙이면 달러표현붙음
select to_char(salary, '$9999,999.99') from employees;
--to_number(문자, 숫자형식) -문자를 숫자로 (숫자 표현식에서 지원하지 않는 구문은 바꿀 수 없다)
select '2000' + 2000 from dual; -- 자동 형변환
select to_number('2000') , '2000' from dual; -- 명시적 형변환
select '$3,300' + 2000 from dual; -- 에러
select to_number('$3,300', '$999,999') + 2000 from dual; -- 숫자 포멧형식을 사용해서 명시적형변환
--to_Date(문자, 날짜표현 형식) -- 문자를 날자로
select to_date('2021-03-31') from dual; -- 낳짜형식의 문자라면 fmt를 적지 않더라도 가능합니다.
select sysdate - (to_date('1995-12-23')) from dual;
select to_date('2020/11/11','YYYY/MM/DD') from dual;
select to_date('2021/03/25 14:51:24', 'YYYY/MM/DD HH24:MI:SS') from dual;
-- '20201130' , '20201111' 날씨차이
select to_date('2020/11/30', 'YYYY/MM/DD') - to_date('2020/11/11','YYYY/MM/DD') from dual;
--xxxx년xx월xx일 로 출력
select to_char(to_date('20051002', 'YYYYMMDD'), 'YYYY"년"MM"월"DD"일"') from dual;
-- NVL(컬럼, Null일경우 변환할값) - ★★★★★
select nvl(200, 0), nvl(null, 0) from dual;
select first_name, nvl(commission_pct, 0) from employees; -- commission_pct 가 null이면 0만듬
--NVL2(컬럼 ,, Null이 아닐 경우 값, Null일 경우값) ★★★★★
select nvl2(null, 'null아님', 'null임') from dual;
select first_name,
commission_pct,
nvl2(commission_pct , salary + ( salary * commission_pct), salary) from employees;
--DECODE(컬럼, 값, 결과, 값, 결과.., default)★★★★★★
select decode('C', 'A', 'A입니다', 'B', 'B입니다', 'C', 'C입니다', '전부 아닙니다') from dual;
select first_name,
job_id,
decode(job_id, 'IT_PROG', salary * 0.5, 'AD_VP', salary *0.4, salary * 0.1)
from employees;
--case 컬럼 when 값 then 결과 end
select first_name,
salary,
job_id,
(case job_id when 'IT_PROG' then salary * 0.5
when 'AD_VP' then salary * 0.4
else salary * 0.1
end) as bonus
from employees;