날짜 함수, 형 변환 함수
2016. 9. 29. 15:59ㆍProgramming/SQL
<날짜 함수, 형 변환 함수>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | 1. INSTR() //특정 문자의 위치를 구하는 함수 a. SELECT INSTR(’WELCOME TO ORACLE’, ‘O’) FROM DUAL; 결과: 5가 출력(WELCO) b. SELECT INSTR(’WELCOME TO ORACLE’, ‘O’, 6, 2) FROM DUAL; i. 대상 문자의 6번째부터 검색해 2번째로 발견되는 ‘o’의 위치 2. 날짜 함수 a. SYSDATE //시스템에 저장된 오늘 날짜 반환 예) 16/09/29 b. MONTHS_BETWEEN(date1, date2) //date1과 2사이의 개월수 반환 *date1이 date2보다 최근이어야 c. ADD_MONTHS(date, n) //date + n개월 날짜 반환 예) 82/01/23 => 82/07/23 d. NEXT_DAY(date, 요일) //date와 가까운 요일이 있는 날짜 반환 예) NEXT_DAY(SYSDATE, ‘수요일’) => 16/10/05 e. LAST_DAY(date) //date를 포함하는 달의 마지막 날을 반환 f. ROUND(date, format) //date를 format으로 반올림(TRUNC는 내림) 예) SELECT ROUND(HIREDATE, 'MONTH') FROM EMP; 결과) 81/11/17 => 81/12/01 3. 문제1) DUAL 테이블에 오늘, 내일, 어제 날짜를 출력하세요. a. SYSDATE(날짜 데이터)는 연산 가능 오늘: SELECT SYSDATE AS 오늘 FROM DUAL; //16/09/29 출력 내일: SELECT SYSDATE+1 AS 내일 FROM DUAL; 어제: SELECT SYSDATE-1 AS 어제 FROM DUAL; 4. 문제2) 사원 이름과 입사일, 사원의 근무 일수를 출력하세요. a. 근무 일수: 오늘 날짜 - 입사일 b. 소수점은 내림하세요. SELECT TRUNC(SYSDATE-HIREDATE) FROM emp; *양수로 출력하려면 => 최근 - 옛날 5. 문제3) 사원 이름과 입사일, 사원이 근무한 개월 수를 출력하세요. SELECT TRUNC(MONTHS_BETWEEN(SYSDATE, HIREDATE)) FROM emp; 6. 문제4) 입사일+6개월을 출력하세요. SELECT ADD_MONTHS(HIREDATE, 6) FROM emp; 결과: 82/01/23 => 82/07/23 7. 문제5) 오늘을 기준으로 가장 가까운 수요일을 DUAL 테이블에 출력 a. 윈도우 운영체제가 사용 중인 언어(한글)을 사용: ‘수요일’ SELECT NEXT_DAY(SYSDATE, ‘수요일’) FROM DUAL; 결과) 16/10/05 b. Oracle 언어(NLS_LANGUAGE)를 변경하려면 ALTER SESSION SET NLS_LANGUAGE = AMERICAN ‘WENDESDAY’로 사용가능 8. 문제6) 사원의 이름과 입사일, 입사한 달의 마지막 날을 출력하세요. SELECT LAST_DAY(HIREDATE) FROM EMP; --------------------------------------------------- 9. 형 변환 함수 a. TO_CHAR(date, format) //날짜를 format 형식 문자로 변환 b. TO_CHAR(number, format) //number를 문자로 변환 c. 숫자 format I. 0 //자릿수를 나타내며 자릿수가 맞지 않으면 0으로 채운다. TO_CHAR(SAL, ‘L999,999’) II. 9 //자릿수가 맞지 않아도 채우지 않는다. III. L //각 지역별 통화를 앞에 표시 IV. . //소수점 V. , //천 단위 자리 구분 d. TO_DATE(’date’, format) //문자를 format 형식 날짜로 변환 e. TO_DATE(date, format) //숫자를 format 형식 날짜로 변환 f. TO_NUMBER //문자를 숫자로 변환 g. 날짜 format I. YYYY //년도 4자리 II. YY //년도 2자리 III. MM //월을 숫자로 IV. MON //월을 알파벳으로 V. DAY //요일 표현 VI. DY //요일을 약어로 표현 h. 시간 format i. AM or PM //오전(AM), 오후(PM) 시각 표현 II. HH or HH12 // 12시간으로 표현(1~12) III. HH24 // 24시간으로 표현(0~23) IV. MI // 분 표현 V. SS // 초 표현 i. 도식도 I. NUMBER -> CHAR -> DATE II. DATE -> CHAR -> NUMBER 10. 문제7) 현재 시각을 2016-09-29 , 13:32:23 형식으로 출력하세요. SELECT TO_CHAR(SYSDATE, ‘YYYY-MM-DD , HH24:MI:SS’ ) FROM DUAL; 11. 문제8) 사원의 이름, 급여(통화 기호 + 천 단위 구분) 출력하세요. SELECT TO_CHAR(SAL, ‘L999,999’) FROM EMP; 결과:\1,600 SELECT TO_CHAR(SAL, ‘L009,999’) FROM EMP; 결과:\001,600 12. TO_DATE(date, format) //문자 or 숫자 date를 날짜형으로 복원 SELECT TO_DATE('1981-10-20') FROM DUAL; 결과: 81/10/20 13. 문제9) TO_DATE를 이용해 입사일이 19810220인 사원을 검색하세요. SELECT HIREDATE FROM EMP WHERE HIREDATE = TO_DATE('1981/10/20', 'YYYY/MM/DD'); 14. 문제10) DUAL 테이블에서 오늘 날짜와 ‘2009/01/01’을 뺀 날을 출력하세요. *형식을 맞춰줘야 날짜나 숫자 타입으로 복원 가능 SELECT SYSDATE-TO_DATE(‘2009/01/01’, ‘YYYY/MM/DD’) FROM DUAL; 15. 문제11) 문자열 ‘20,000’과 ‘10,000’을 마이너스 연산하기 *연산하기 위해 숫자로 바꿔줘야 SELECT TO_NUMBER(‘20,000’, ‘99,999’)-TO_NUMBER(‘10,000’, ‘99,999’) FROM DUAL; 결과:10000 | cs |
'Programming > SQL' 카테고리의 다른 글
SQL 정리 (0) | 2017.01.31 |
---|---|
오라클 DB 구축하는 법 (0) | 2017.01.10 |
숫자, 문자 처리 함수 (0) | 2016.09.28 |
SELECT, 정렬 (0) | 2016.09.28 |
MySql 설치 및 DB 생성(cmd 통해) (0) | 2016.09.19 |