SELECT 98.7654
,ROUND(98.7654) -- 1째짜리 반올림 :99
,ROUND(98.7654,1) -- 2째짜리 반올림 :98
,ROUND(98.7654,2) -- 3째짜리 반올림 :98
FROM DUAL;
-- 간단연습 : 3.14 둘째짜리 반올림하세요
SELECT 3.14
,ROUND(3.14,1)
FROM DUAL;
-- 2)버림 (내림,절삭) :
SELECT 98.7654
, TRUNC(98.7654) -- 1번쨰 자리 버림
, TRUNC(98.7654,1) -- 2번쨰 자리 버림
, TRUNC(98.7654,2) -- 3번쨰 자리 버림
FROM DUAL;
-- 3) 자바 : % = SQL = MOD(숫자, 나눌 값), MOD (컬럼명, 나눌값) : 나머지 구해주는 함수
SELECT MOD(31,2)
FROM DUAL;
-- 간단연습 : 모든 사원의 급여를 각각 500으로 나눈 나머지를 계싼해서 출력
SELECT MOD (SALARY, 500)
FROM EMPLOYEE;
-- 날짜 함수 : 1) 현재 날짜 보기(**) : SYSDATE
SELECT SYSDATE FROM DUAL;
-- 예제) 오늘, 어제 내일 날짜를 출력해보세요
-- 날짜) : 산술연산이 가능(+,-등)
SELECT SYSDATE AS 오늘
, SYSDATE -1 AS 어제
, SYSDATE +1 AS 내일
FROM DUAL;
--예제 2) 사원테이블에서 근무일수 계산해서 조회하기
-- 공식 : 현재날짜 -(빼기) 입사일 (HIREDATE) : 근무일수
SELECT ROUND (SYSDATE - HIREDATE) FROM EMPLOYEE;
--예제3) 두 날짜 사이의 개월수를 출력하는 함수 :
-- 각 사원들이 근무한 개월수 구하기 (현재날짜)
SELECT ENAME, SYSDATE, HIREDATE
,TRUNC (MONTHS_BETWEEN(SYSDATE, HIREDATE)) AS 개월수
FROM EMPLOYEE;
-- 예제 4) 개월 수 더하기 함수 :
-- 입사일에서 6개월이 지난 시점에 날짜 구하기
SELECT ENAME, HIREDATE
,ADD_MONTHS (HIREDATE, 6)
FROM EMPLOYEE;
-- 예제 5) 날짜컬럼에서 데이터가 최초로 도래하는 요일의 날짜 출력 NEXT_DAY()
-- 오늘을 기준으로 최초로 도래하는 토요일의 날짜 구하기
SELECT SYSDATE
, NEXT_DAY(SYSDATE, '토요일')
FROM DUAL;
--예제 6 LAST_DAY (날짜컬럼)
-- 날짜 컬럼의 그 달 (월) 의 마지막 날의 날짜를 구해주는 함수: 30, 31, 28, 29
-- 예제 6) 입사한(HIREDATE) 날의 마지막 날짜 구하기
SELECT ENAME, HIREDATE
, LAST_DAY(HIREDATE)
FROM EMPLOYEE;
-- 자료형 변환 함수(*)
-- 자료형 : 문자열 표시 : ' '(홑따옴표)
-- 숫자 : 1 (그냥 사용)
-- 정리 : (컬럼(제목)) 자료형 :
-- 1) 문자열* : VARCHAR2(가변문자열)
-- , CHAR(고정문자열)
-- 2) 숫자* : NUMBER 실수,정수,자연수
-- 3) 날짜 : DATE
-- 기타 : CLOB(큰 문자열), BLOB(이미지저장)
-- 1) 날짜자료형 -> 문자자료형으로 변환 함수 : TO_CHAR(컬럼명, '날짜포멧')
-- 날짜포맷 : 예) 'YYYY-MM-DD HH24:MI:SS'
-- YYYY(년도(YEAR, 4자리)), YY(년도(2자리))
-- MM(월(MONTH, 2자리))
-- DD(일(DAY, 2자리))
-- HH(시(HOUR, 1~12까지 시간, 2자리))
-- HH24(시(HOUR, 1~24까지 시간, 2자리))
-- MI(분(MINUTE, 2자리))
-- SS(초(SECOND, 2자리))
SELECT ENAME, HIREDATE
,TO_CHAR(HIREDATE, 'YYYY-MM-DD HH24:MI:SS') AS 날짜
FROM EMPLOYEE;
-- 간단연습
-- 현재날짜를(SYSDATE) 아래 날짜 포멧으로 출력하세요
-- 2024-08-19 12/35/00
SELECT SYSDATE
, TO_CHAR(SYSDATE,'YYYY-MM-DD HH24/MI/SS') AS 시간
FROM DUAL;
-- 2) 숫자자료형 -> 문자자료형으로 변환 : TO_CHAR(칼럼명, '숫자포멧')
-- 숫자포맷 : 예) 'L999,999', 'L000,000'
-- L - 각 나라별 통화 기호를(W, $ 등) 자동으로 붙여줌(S/W 설치시 통화지정)
-- 9 - 3자리를 잡고 자리수가 모자라면 0을 채워주지는 않음
-- 0 - 3자리를 잡고 자리수가 모자라면 0을 채움
-- , - 각 통화의 중간에 쉼표(,)를 자동으로 추가해줌
SELECT ENAME, SALARY
,TO_CHAR(SALARY, 'L000,000')
,TO_CHAR(SALARY, 'L999,999')
FROM EMPLOYEE;
-- 3)문자자료형 -> 날짜자료형 변환하는 함수 : TO_DATE()
SELECT ENAME, HIREDATE
FROM EMPLOYEE
WHERE HIREDATE = TO_DATE('19810220', 'YYYYMMDD'); -- 오라클에서 자동적으로 날짜형으로 변환함
-- 4) 문자자료형 -> 숫자로 변환하는 함수 : TO_NUMBER()
-- 예제 숫자 형태의 통화(돈)끼리 연산(빼기)
SELECT TO_NUMBER('100,100','999,999') - TO_NUMBER ('50,000','999,999')
FROM DUAL;
-- 일반 함수들 : 1) NVL() : NULL 값 -> 특정 문자로(숫자) 변경하는 함수
-- 연봉 + 보너스 구하기 : SALARY(급여) * 12 + COMMISSION(보너스)
-- 사원 : EMPLOYEE
SELECT ENAME, SALARY
, SALARY * 12 + NVL (COMMISSION, 0)
FROM EMPLOYEE;
--2) 조건문 : DECODE / CASE WHEN (중급 함수)
-- 예제) DECODE 를 이용해서 부서명을 출력하세요
-- 10 '회계부' , 20'연구소' , 30'판매부' , 40 '운영부'
SELECT ENAME, DNO
, DECODE (DNO, 10, '회계부'
, 20, '연구소'
, 30, '판매부'
, 40, '운영부'
, '디폴트') AS 부서명
FROM EMPLOYEE;
-- 12_그룹함수.sql (***)
-- 그룹 함수 : 통계, 집계하는 함수, (합계, 평균,최대값 등)
-- 1) 전체 데이터 집계(그룹) 함수 :
-- 그룹함수는 그룹함수 끼리 사용가능 (다른 컬럼과 사용 불가)
-- 사용법) SUM(컬럼명) : 총액
-- AVG(컬럼명) : 평균
-- MAX(컬럼명) : 최대값
-- MIN(컬럼명) : 최소값
-- COUNT(컬럼명) : 전체 데이터 개수
-- 예제 1) 사원들의 급여(SALARY) 총액, 평균, 최고, 최소액을 출력
SELECT SUM(SALARY) AS 총액
, AVG(SALARY) AS 평균
, MAX(SALARY) AS 최고액
, MIN(SALARY) AS 최저액
FROM EMPLOYEE;