본문 바로가기

학원 일기/학원-ORACLE

디비 3일차

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;

'학원 일기 > 학원-ORACLE' 카테고리의 다른 글

db7일차  (0) 2021.04.06
db6일차  (0) 2021.04.05
db5일차  (0) 2021.04.02
db4일차  (0) 2021.04.01
데이터베이스 2일차  (0) 2021.03.30