[] : 생략가능
(오라클 23 은 CONCAT(1,2,3) 이렇게 여러개 가능)
한글은 3바이트
LPAD : 주어진 문자열을 정의된 크기의 기억공간에 오른쪽부터 채우고 남는 왼
쪽 공간에 ‘채울 문자열’을 padding 함
RPAD : 주어진 문자열을 정의된 크기의 기억공간에 왼쪽부터 채우고 남는 오른
쪽 공간에 ‘채울 문자열’을 padding 함
‘채울문자열’이 생략되면 공백이 채워짐
주어진 문자열 왼쪽부터(LTRIM) 또는 오른쪽부터(RTRIM) ‘제거할 문자열'을 찿
아 제거함
‘제거할 문자열'을 생략한 경우 공백을 제거함
주어진 문자열 왼쪽과 오른쪽에 존재하는 공백을 제거함
단, 문자열 내부의 공백은 제거하지 못함
주어진 문자열에서 ‘시작위치’부터 '길이’만큼의 문자를 추출하여 반환
길이가 생략되면 ‘시작위치'에서 나머지 모든 글자 반환
시작위치와 길이는 1부터 시작함
주어진‘문자열’에서 ‘문자열1’을 ‘문자열2’로 대치함
‘문자열'에 ‘문자열1’이 완벽하게 일치해야 함
‘문자열2’가 생략되면 공백을‘문자열1’을 삭제-문자열 내부 공백 제거 가능
문자열과 찾을 문자는 필수 입력 값이다.
시작 위치는 위치를 찾을 문자열의 시작 데이터 위치, 찾을 순번은 찾으려는 문
자가 시작 위치에서 부터 몇 번째인지 지정한다.
시작 위치가 음수일 경우 문자 열의 오른쪽 끝 부터 왼쪽 방향으로 검색한다.
SELECT PROD_ID AS 상품코드,
PROD_NAME AS 상품명,
PROD_COST AS 매입단가,
PROD_PRICE AS 매출단가
FROM PROD
WHERE LOWER(LPROD_GU)='p201';
SELECT EMP_ID,
EMP_NAME,
LOWER (EMP_NAME),
INITCAP(LOWER(EMP_NAME))
FROM C##HR.EMP
- 회원 테이블에서 ‘충남’에 거주하는 회원정보를 조회하시오.
(단 주소는 기본주소와 상세주소를 결합하여 출력하되 한칸의 공백을 두 자료 사이에 추가하며, CONCAT함수를 사용하시오.) (회원번호,회원명,주소)
SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
CONCAT(CONCAT(MEM_ADD1,' '),MEM_ADD2) AS 주소
FROM MEMBER
WHERE MEM_ADD1 LIKE '충남%';
위 처럼 함수 안에 함수를 쓸 수 있음.
SELECT TO_DATE(SUBSTR(CART_NO,1,8)) AS 일자,
PROD_ID AS 상품번호,
CART_QTY AS 수량
FROM CART
WHERE SUBSTR(CART_NO,1,6) = '202006';
ORDER BY 일자;
위처럼 ORDER BY 뒤에 별칭이나 숫자(행)을 넣어도 가능
TO_DATE를 써서 날짜형식으로 출력할 수 있음
SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
MEM_REGNO1||'-'||MEM_REGNO2 AS 주민등록번호,
EXTRACT(YEAR FROM SYSDATE) -
(CASE WHEN SUBSTR(MEM_REGNO2,1,1) IN('1','2') THEN
1900+TO_NUMBER(SUBSTR(MEM_REGNO1,1,2))
ELSE
2000+TO_NUMBER(SUBSTR(MEM_REGNO1,1,2))
END)AS 나이
FROM MEMBER;
년원일, 시분초 각각 세트임. 년월 만 쓸수 없음.
년도 뽑을때는 EXTRACT(YEAR FROM SYSDATE) -> 년도만 딱 뽑힘 2025년이면 2025.
주민번호 뒷자리가 3,4 면 +2000, 뒷자리가 1,2면 +1900.
CASE WHEN 은 IF랑 같다.
TO_NUMBER 로 숫자로 바꿀 수 있다.
SELECT TO_CHAR(SYSDATE,'YYYYMMDD')||
TRIM(TO_CHAR(TO_NUMBER(SUBSTR(MAX(CART_NO),9))+1,'00000'))
AS 장바구니번호1,
TO_CHAR(MAX(CART_NO)+1) AS 장바구니번호2
FROM CART
WHERE CART_NO LIKE '20200415%'
TO_MAX : 제일 큰 값
||로 붙였을 경우 공백이 생겨서 TRIM 사용.
장바구니 번호1의 경우 문자로 변환후 출력하려면 굉장히 복잡.
장바구니 번호2의 경우 숫자로 변환하고 하니까 간단.
둘 다 결과값은 같다.
SELECT NVL2(PROD_COLOR,LPAD(PROD_COLOR,7),'색상정보없음') AS 색상정보
FROM PROD;
NVL2 : NULL처리 함수, NVL의 확장 버전. NULL값이면 '색상정보없음'을 출력.
LPAD를 써서 가운데쪽에 위치하도록 만듬.
SELECT PROD_COST AS 매입가격,
LPAD(PROD_COST,10,'*') AS 판매가격1,
RPAD(PROD_COST,10,'*') AS 판매가격2
FROM PROD;
* : 수표보호문자
SELECT LTRIM('APPLEORANGEAABBCC','A'),
LTRIM('AABBDEF','AB'),
RTRIM('APPLEORANGEAABBCC','ABC'),
LTRIM(' APPLEORANGEAABBCC'),
LTRIM('APPLEOR ')
FROM DUAL;
DUAL : 가상의 테이블을 만들어줌 (SYS. 이 생략되있음)
- 실행 결과

SELECT PROD_NAME, REPLACE(PROD_NAME,'대우','APPLE'),
REPLACE(PROD_NAME,' ')
FROM PROD;
모든 공백을 지울때 많이씀
- 실행 결과

ABS : n의 절대값
SIGN : n의 부호에 따라 음수이면-1, 0이면 0, 양수이면 1을 반환
SQRT : n의 제곱근(평방근)
POWER : b의 n승 값(b를 n번 거듭 곱셈한 값)

m이 양수인 경우 : 주어진 자료 n의 소수부분 m+1번째 자리에서 반올림하여 m번째 까지 반환
m이 음수인 경우 : 주어진 자료 n의 정수부분 m번째 자리에서 반올림하여 반환
m이 양수인 경우 : 주어진 자료 n의 소수부분 m+1번째 자리에서 절삭하여 m번째 까지 반환
m이 음수인 경우 : 주어진 자료 n의 정수부분 m번째 자리에서 절삭하여 반환

n과 같거나 큰 수 중에 가장 작은 정수 소수점 이하의 값이 존재하면 무조건 올림하는 함수
급여,세금과 같은 금액 관련 계산 중에 자주 사용된다.

SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
MEM_BIR AS 생년월일,
EXTRACT(YEAR FROM SYSDATE) -
(CASE WHEN SUBSTR(MEM_REGNO2,1,1) IN('1','2') THEN
1900+TO_NUMBER(SUBSTR(MEM_REGNO1,1,2))
ELSE
2000+TO_NUMBER(SUBSTR(MEM_REGNO1,1,2)) -- 이거도 나이
END) AS 나이,
TRUNC((EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM MEM_BIR))
-- 이거도 나이
,-1) || '대' AS 연령대
FROM MEMBER;
위처럼 나이를 다양하게 표시할 수 있음
TRUNC를 사용하여 연령대를 구함. 25 라면 -1을 써서 20으로 내림. 그리고 뒤에 '대'를 붙임
- 실행 결과

SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
MEM_MILEAGE AS 마일리지,
WIDTH_BUCKET(MEM_MILEAGE,1000,8000,8) AS 구간인덱스,
CASE WHEN WIDTH_BUCKET(MEM_MILEAGE,1000,8000,8) <= 3 THEN '새싹회원'
WHEN WIDTH_BUCKET(MEM_MILEAGE,1000,8000,8) BETWEEN 4 AND 6 THEN '평회원'
ELSE 'VIP회원'
END AS 비고
FROM MEMBER;
SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
MEM_MILEAGE AS 마일리지,
-- WIDTH_BUCKET(MEM_MILEAGE,8000,1000,8) || '등급' AS 등급 -- 이 방법은 1000을 포함하지 못해서 1000이 다른 등급으로 감.
10 - WIDTH_BUCKET(MEM_MILEAGE,1000,8000,8) AS 등급 -- 이게 훨신 정확(보수를 이용하는 방법)
FROM MEMBER
ORDER BY 등급;
웹프로그램의 분기문의 기능을 제공
SELECT절에서만 사용가능
CASE WHEN ~ THEN과 DECODE가 제공

