직원들의 주민번호를 조회하여 사원명, 생년, 생월, 생일을 각각 분리하여 조회 컬럼의 별칭은 사원명, 생년, 생월, 생일로 한다. SELECT |
SELECT
EMP_NAME 사원명
,SUBSTR(EMP_NO, 1,2) 생년
,SUBSTR(EMP_NO, 3,2) 생월
,SUBSTR(EMP_NO, 5,2) 생일
FROM EMPLOYEE;
날짜 데이터 직원들의 입사일에서 입사년도, 입사월, 입사 날짜를 분리하여 조회 |
SELECT
HIRE_DATE
,SUBSTR(HIRE_DATE,1,2)입사년도
,SUBSTR(HIRE_DATE,4,2)입사월
,SUBSTR(HIRE_DATE,7,2)입사일
FROM EMPLOYEE;
WHERE절에도 함수를 사용할 수 있다. EMP_NO를 통해 성별을 판단하여 여성 직원들이 모든 컬럼 정보를 조회한다. |
WHERE SUBSTR(EMP_NO,8,1)='2'; |
SELECT
*
FROM EMPLOYEE
WHERE SUBSTR(EMP_NO,8,1)='2';
WHERE절에는 단일행 함수만 사용 가능 | |
사원명, 주민번호 조회. 주민번호는 생년월일만 보이게 하고 '-' 다음의 값은 '*'로 바꿔 출력. 14개로 고정, 1부터 7까지 그 뒤는 *로 하겠다. 필요에 따라 중첩적으로 사용가능. |
EMP_NAME ,RPAD(SUBSTR(EMP_NO, 1, 7), 14,'*') |
SELECT
*
FROM EMPLOYEE
WHERE AVG(SALARY) > 100;
--에러
-- 함수 중첩 사용 가능 : 함수 안에서 함수를 사용할 수 있다.
-- 사원명, 주민번호 조회. 주민번호는 생년월일만 보이게 하고 '-' 다음의 값은 '*'로 바꿔 출력.
--14개로 고정, 1부터 7까지 그 뒤는 *로 하겠다. 필요에 따라 중첩적으로 사용가능.
SELECT
EMP_NAME
,RPAD(SUBSTR(EMP_NO, 1, 7), 14,'*')
FROM EMPLOYEE;
사원명, 이메일, 이메일의 @이후를 제외한 아이디 조회 | ,SUBSTR(EMAIL,1, INSTR(EMAIL, '@')-1) FROM EMPLOYEE; |
SELECT
EMP_NAME
,EMAIL
--맨 앞에서부터 시작해서 골뱅이 앞(-1)까지
,SUBSTR(EMAIL,1, INSTR(EMAIL, '@')-1)
FROM EMPLOYEE;
SUBSTRB : 바이트 단위로 추출하는 함수 | SUBSTR('ORACLE', 3, 2) , SUBSTRB('ORACLE', 3, 2) |
SELECT
SUBSTR('ORACLE', 3, 2)
, SUBSTRB('ORACLE', 3, 2)
FROM DUAL;
SELECT
SUBSTR('오라클', 2, 2)
, SUBSTRB('오라클', 4, 6)
FROM DUAL;
LOWER / UPPER / INITCAP | 대소문자 변경해주는 함수,앞글자만 대문자 |
LOWER(문자열 | 컬럼) | 소문자로 변경해주는 함수 |
UPPER(문자열 | 컬럼) | 대문자로 변경해주는 함수 |
INITCAP(문자열 | 컬럼) | 앞 글자만 대문자로 변경해주는 함수 |
SELECT
LOWER('Welcome To My World')
FROM DUAL;
SELECT
UPPER('Welcome To My World')
FROM DUAL;
SELECT
INITCAP('welcome to my world')
FROM DUAL;
CONCAT | 문자열 혹은 컬럼 두 개를 입력 받아 하나로 합친 후 리턴 /사실 연결 연산자 사용해도 무방 |
SELECT
CONCAT('가나다라', 'ABCD')
FROM DUAL;
SELECT
'가나다라' || 'ABCD'
FROM DUAL;
REPLACE | 컬럼 혹은 문자열을 입력 받아 변경하고자 하는 문자열을 변경하려고 하는 문자열로 바꾼 후 리턴 |
SELECT
REPLACE('서울시 강남구 역삼동', '역삼동', '삼성동')
FROM DUAL;
숫자 처리 함수 | ABS, MOD, ROUND, FLOOR, TRUNC, CEIL |
ABS(숫자 | 숫자로 된 컬럼명) | 절대값 구하는 함수 |
SELECT
ABS(-10)
, ABS(10)
FROM DUAL;
MOD(숫자 | 숫자로 된 컬럼명, 숫자 | 숫자로 된 컬럼명) | 두 수를 나누어서 나머지를 구하는 함수 처음 인자는 나누어지는 수, 두 번째 인자는 나눌 수 |
SELECT
MOD(10, 5)
, MOD(10, 3)
FROM DUAL;
ROUND(숫자 | 숫자로 된 컬럼명, [위치]) | 반올림해서 리턴하는 함수 |
SELECT ROUND(123.456) FROM DUAL;
SELECT ROUND(123.456, 0) FROM DUAL;
SELECT ROUND(123.456, 1) FROM DUAL;
SELECT ROUND(123.456, 2) FROM DUAL;
SELECT ROUND(123.456, -2) FROM DUAL;
FLOOR(숫자 | 숫자로 된 컬럼명) | 내림처리하는 함수 |
SELECT FLOOR(123.456) FROM DUAL;
SELECT FLOOR(123.678) FROM DUAL;
TRUNC(숫자 | 숫자로 된 컬럼명, [위치]) | 내림처리(절삭) 함수 |
SELECT TRUNC(123.456) FROM DUAL;
SELECT TRUNC(123.678) FROM DUAL;
SELECT TRUNC(123.456, 1) FROM DUAL;
SELECT TRUNC(123.456, 2) FROM DUAL;
SELECT TRUNC(123.456, -1) FROM DUAL;
CEIL(숫자 | 숫자로 된 컬럼명) | 올림 처리 함수 |
SELECT CEIL(123.456) FROM DUAL;
SELECT CEIL(123.678) FROM DUAL;
SELECT
ROUND(123.456)
, FLOOR(123.456)
, TRUNC(123.456)
, CEIL(123.456)
FROM DUAL;
날짜 처리 함수
SYSDATE | 시스템에 저장되어 있는 날짜를 반환하는 함수 |
SELECT
SYSDATE
FROM DUAL;
MONTHS_BETWEEN(날짜,날짜) | 두 날짜의 대월 수 차이를 숫자로 리턴 |
CEIL 소수점 처리 | ,CEIL(MONTHS_BETWEEN(SYSDATE, HIRE_DATE)) |
--CEIL 소수점 처리
SELECT
EMP_NAME
,HIRE_DATE
,CEIL(MONTHS_BETWEEN(SYSDATE, HIRE_DATE))
FROM EMPLOYEE;
ADD_MOMTH(날짜,숫자) | 날짜에 숫자만큼 개월 수 더해서 리턴 |
SELECT
ADD_MONTHS(SYSDATE,5)
FROM DUAL;
근무년수가 20년 이상인 직원의 모든 컬럼 조회 | WHERE ADD_MONTHS(HIRE_DATE,240) <= SYSDATE; |
SELECT
*
FROM EMPLOYEE
-- WHERE MONTHS_BETWEEN(SYSDATE, HIRE_DATE) >= 240; 숫자로반환
--날짜에다가 숫자를 더해서 날짜로 반환 최종 날짜값이 반환
WHERE ADD_MONTHS(HIRE_DATE,240) <= SYSDATE;
NEXT_DAY(기준날짜, 요일(문자 |숫자)) | 기준 날짜에서 구하려는 요일에 가장 가까운 날짜 리턴 |
SELECT
SYSDATE
, NEXT_DAY(SYSDATE,'금요일')
FROM DUAL;
SELECT
SYSDATE
, NEXT_DAY(SYSDATE,'금')
FROM DUAL;
--숫자는 1~7이며 일요일부터 시작한다.
SELECT
SYSDATE
, NEXT_DAY(SYSDATE,6)
FROM DUAL;
--시스템 환경에 따라 언어 설정되어 있으므로 변경을 원하면 설정을 변경해서 사용한다.
SELECT
SYSDATE
, NEXT_DAY(SYSDATE,'FRIDAY')
FROM DUAL;
ALTER SESSION SET NLS_LANGUAGE = AMERICAN;
ALTER SESSION SET NLS_LANGUAGE = KOREAN;
LAST_DAY(날짜) | 해당 월의 마지막 날짜를 구하여 리턴 |
SELECT
SYSDATE
, LAST_DAY(SYSDATE)
FROM DUAL;
사원명, 입사일, 입사한 월의 근무일수(주말 포함) 날짜-날짜 빼기 연산 가능, 했을 때 숫자가 나옴, 두개의 일 수차이가 나온다. |
EMP_NAME ,HIRE_DATE ,LAST_DAY(HIRE_DATE) - HIRE_DATE +1 "입사월의 근무일수" |
SELECT
EMP_NAME
,HIRE_DATE
,LAST_DAY(HIRE_DATE) - HIRE_DATE +1 "입사월의 근무일수"
FROM EMPLOYEE;
EXTRACT | 년,월,일 정보를 추출하여 리턴하는 함수 |
-EXTRACT(YEAR FROM 날짜) | 년도만 추출 |
EXTRACT(MONTH FROM 날짜) | 월만 추출 |
EXTRACT(DAY FROM 날짜) | 일만 추출 |
SELECT
EXTRACT(YEAR FROM SYSDATE) 년도
,EXTRACT(MONTH FROM SYSDATE) 월
,EXTRACT(DAY FROM SYSDATE) 일
FROM DUAL;
직원의 이름, 입사일, 근무년수 조회 근무년수는 현재년도 - 입사년도로 조회한다. |
EMP_NAME ,HIRE_DATE ,EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM HIRE_DATE) |
SELECT
EMP_NAME
,HIRE_DATE
,EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM HIRE_DATE)
FROM EMPLOYEE;
2023-1990 인경우 33이 나옴 근무년수를 만으로 계싼하는 경우에는 월의 차이를 계산해야 한다 |
EMP_NAME ,HIRE_DATE ,FLOOR (MONTHS_BETWEEN(SYSDATE,HIRE_DATE) / 12) "만 근무년수" |
SELECT
EMP_NAME
,HIRE_DATE
,FLOOR (MONTHS_BETWEEN(SYSDATE,HIRE_DATE) / 12) "만 근무년수"
FROM EMPLOYEE;
형변환 함수 | |
TO_CHAR(날짜, [포맷]) | 날짜형 데이터를 문자형 데이터로 변경 |
TO_CHAR(숫자, [포맷]) | 숫자형 데이터를 문자형 데이터로 변경 |
SELECT TO_CHAR(1234) FROM DUAL;
SELECT TO_CHAR(1234, '99999') FROM DUAL;
SELECT TO_CHAR(1234, '00000') FROM DUAL;
SELECT TO_CHAR(1234, 'L99999') FROM DUAL;
SELECT TO_CHAR(1234, '$99999') FROM DUAL;
SELECT TO_CHAR(1234, '00,000') FROM DUAL;
SELECT TO_CHAR(1234, '999') FROM DUAL;
직원 테이블에서 사원명, 급여 조회 | |
급여는 '\9,000,000' 형식으로 표시 | ,TO_CHAR(SALARY, 'L99,999,999') |
SELECT
EMP_NAME
,TO_CHAR(SALARY, 'L99,999,999')
FROM EMPLOYEE;
날짜 데이터 포맷 적용 시에도 TO_CHAR 함수 사용
SELECT TO_CHAR(SYSDATE, 'PM HH24:MI:SS') FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'AM HH:MI:SS') FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'MON DY, YYYY') FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'YYYY-fmMM-DD DAY') FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD DAY') FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'YEAR, Q') || '분기' FROM DUAL;
SELECT
EMP_NAME
, TO_CHAR(HIRE_DATE, 'YYYY-MM-DD') 입사일
FROM EMPLOYEE;
SELECT
EMP_NAME
, TO_CHAR(HIRE_DATE, 'YYYY"년" MM"월" DD"일"') 입사일
FROM EMPLOYEE;
SELECT
EMP_NAME
, TO_CHAR(HIRE_DATE, 'YYYY/MM/DD HH24:MI:SS') 상세입사일
FROM EMPLOYEE;
SMALL
'SQL' 카테고리의 다른 글
SQL GROUP BY와 HAVING (0) | 2023.01.12 |
---|---|
SQL1 SELECT개요 (0) | 2023.01.12 |
SQL Function (0) | 2023.01.12 |
SQL SELECT (0) | 2023.01.11 |
SQL 00 orcale 데이터베이스 (0) | 2023.01.11 |