DataBase

[Oracle DB 입문 08] SQL 예제

코딩순이 2021. 3. 5. 20:33

▶ SUBSTR

1. 장바구니 테이블(CART)에서 장바구니 번호(CART_NO) 중에 04월에 해당하는 데이터만 출력하기
- ALIAS : CART_NO, CART_PROD
(Hint : 2005060100001 : 앞에 8자리가 날짜)

SELECT CART_NO
, CART_PROD
FROM CART
WHERE SUBSTR(CART_NO, 5, 2) = '04';

 

2. 상품테이블의 상품코드(PROD_ID)에서 왼쪽 4자리, 오른쪽 4자리를 검색하시오.

 

- P102000001    : 상품코드
- P102         : 대분류
- 000001       : 순번

- ALIAS명은 상품코드(PROD_ID), 대분류, 순번)

SELECT PROD_ID AS 상품코드
, SUBSTR(PROD_ID,1,4) AS 대분류
, SUBSTR(PROD_ID,-6) AS 순번
FROM PROD;

▶ REPLACE

SELECT REPLACE('SQL Project','SQL', 'SSQQLL')
, REPLACE('Java Flex Via', 'a') -- 'a'가 전부 제거
, RTRIM('Java Flex Via','a') -- 오른쪽에서 a를 검색하여 제거
FROM DUAL;

3. 거래처 테이블의 거래처명 중 '삼 -> 육' 으로 치환하시오.

SELECT BUYER_NAME
, REPLACE(BUYER_NAME,'삼','육') "삼->육"
FROM BUYER;

4. 회원테이블의 회원성명 중 '아'-->'리'로 치환 검색하시오
- ALIAS명은 회원명, 회원명치환

SELECT MEM_NAME AS 회원명
, REPLACE(MEM_NAME,'이','리') AS 회원명치환
FROM MEMBER;

▶ INSTR

SELECT INSTR('hello heidi' , 'he') AS RESULT1
, INSTR('hello heidi' , 'he' , 3) AS RESULT2
, INSTR('hello heidi' ,'he' , 1 , 2) AS RESULT3
FROM DUAL;

SELECT INSTR('I have a hat.' , 'ha')
, INSTR('I have a hat.' , 'ha' , 1, 2)
, INSTR('I have a hat.' , 'ha' , 4)
, INSTR('I have a hat.' , 'ha' , -1) -- 역방향으로 찾음
, INSTR('I have a hat.' , 'ha' , -1 , 2) -- 역방향으로 찾음
FROM DUAL;

-- 메일 아이디와 도메인 분리하기

SELECT MEM_MAIL AS 원본 
, INSTR(MEM_MAIL , '@') AS 위치
, SUBSTR(MEM_MAIL, 1 , INSTR(MEM_MAIL , '@') - 1)
, SUBSTR(MEM_MAIL , INSTR(MEM_MAIL , '@') + 1) 
FROM MEMBER; 

▶ SYSDATE

-- SYSDATE : 현재 날짜 & 시간 출력
-- date + NUMBER : 숫자만큼 일수가 더해진 날짜 Return
-- date - NUMBER : 숫자만큼 일수가 빠진 날짜 Return
-- date - date : 두 날짜 사이의 일수 Return
-- date + 1 / 24 한 시간을 더한 날짜 Return

SELECT SYSDATE AS 현재시간
, SYSDATE - 1 AS 어제
, SYSDATE + 1 AS 내일
, TO_CHAR(SYSDATE + (1/24), 'YYYY-MM-DD HH:MI:SS') AS 한시간후
, TO_CHAR(SYSDATE + ((1/24)/60), 'YYYY-MM-DD HH:MI:SS') AS 일분후
FROM DUAL;
-- 문제 : 나는 몇 일을 살았는가? TO_DATE('2015-04-10') 함수 이용
-- 밥은 하루에 3번을 먹음 / 소수점 2째자리까지 반올림하여 처리하시오.
-- ALIAS : 내생일, 산일수, 밥먹은수
-- 밥먹은 비용(한끼에 10,000원으로 처리)
SELECT TO_DATE('1992-05-17') AS 내생일
, ROUND(SYSDATE - TO_DATE('1992-05-17') , 2)  AS 산일수
, ROUND((SYSDATE - TO_DATE('1992-05-17')) * 3 * 10000 , 2) AS 밥먹은비용
FROM DUAL;