날짜 함수, 형 변환 함수

2016. 9. 29. 15:59Programming/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’, 62FROM 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, 6FROM 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