본문 바로가기
초보자를 위한 SQL 200제/이론 & 예제

008 WHERE절 배우기 2 (문자와 날짜 검색)

by Hwanii_ 2023. 7. 9.
728x90
SELECT * FROM emp;

 

     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7839 KING       PRESIDENT            81/11/17       5000                    10
      7698 BLAKE      MANAGER         7839 81/05/01       2850                    30
      7782 CLARK      MANAGER         7839 81/05/09       2450                    10
      7566 JONES      MANAGER         7839 81/04/01       2975                    20
      7654 MARTIN     SALESMAN        7698 81/09/10       1250       1400         30
      7499 ALLEN      SALESMAN        7698 81/02/11       1600        300         30
      7844 TURNER     SALESMAN        7698 81/08/21       1500          0         30
      7900 JAMES      CLERK           7698 81/12/11        950                    30
      7521 WARD       SALESMAN        7698 81/02/23       1250        500         30
      7902 FORD       ANALYST         7566 81/12/11       3000                    20
      7369 SMITH      CLERK           7902 80/12/11        800                    20

     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7788 SCOTT      ANALYST         7566 82/12/22       3000                    20
      7876 ADAMS      CLERK           7788 83/01/15       1100                    20
      7934 MILLER     CLERK           7782 82/01/11       1300                    10

14개 행이 선택되었습니다.

 

검색을 원하는 문자 데이터를 검색 하려면 어떻게 해야 할까 ?

 

숫자 데이터를 검색하는 것과 같이 WHERE 절을 사용 하면 된다.

 

1.

 

이름이 SCOTT인 사원의,

이름, 월급, 직업, 입사일, 부서 번호 출력 하기.

 

SELECT ename, sal, job, hiredate, deptno
FROM emp
WHERE ename = 'SCOTT';

 

ENAME             SAL JOB       HIREDATE     DEPTNO
---------- ---------- --------- -------- ----------
SCOTT            3000 ANALYST   82/12/22         20

 

숫자와 다르게 싱글 쿼테이션 마크에 감싸 주면 된다.

 

감싸줌으로써, 숫자가 아니라, 문자 라는것을 오라클 에게 알려 주는 것이다.

 

2.

81년 11월 17일에 입사한 사원의 이름과 입사일 출력 하기.

 

SELECT ename, hiredate
FROM emp
WHERE hiredate = '81/11/17';

 

ENAME      HIREDATE
---------- --------
KING       81/11/17

 

문자와 동일하게 날짜도 싱글 쿼테이션 마크를 감싸준다.

 

날짜 데이터 검색의 경우, 현재 접속한 세션의 날짜 형식에 맞춰서,

작성 해야 한다.

우리 나라는, 연/월/일 이지만,

미국의 경우는, 일/월/연 이기 때문에,

17/11/81 로 검색 해야 한다.

 

따라서, 날짜를 검색 하기 전에 현재 접속한 세션의 날짜 형식을 확인 하는 것이 좋다.

 

3.

현재 접속한 세션의 날짜 형식 확인 하기.

 

SELECT *
FROM NLS_SESSION_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT';

 

PARAMETER                      VALUE                                                           
------------------------------ ----------------------------------------------------------------
NLS_DATE_FORMAT                RR/MM/DD

 

RR : 년도

MM : 달

DD : 일

 

4.

현재 세션의 날짜 형식을 변경 하기.

 

ALTER SESSION SET NLS_DATE_FORMAT = 'YY/MM/DD';

Session이(가) 변경되었습니다.

 

YY : 현재 세기의 연도. (2000년대)

 

RR : 이전 세기의 연도. (1900년대)

 

위와 같이, YY로 바꾸고, 아래와 같이 쿼리문을 작성 하면 어떻게 될까 ?

 

SELECT ename, sal
FROM emp
WHERE hiredate = '81/11/17';

 

선택된 행 없음

 

선택된 행이 없다고 뜨게 된다.

 

왜냐하면, YY로 바꾸었기 때문이다.

 

YY는 2081년을 의미한다.

 

RR은 1981년을 의미한다.

 

ALTER SESSION SET 명령어 ?

 

현재 내가 접속한 세션의 파라미터를 변경하는 명령어 이다.

 

세션은 데이터 베이스 유저로 로그인 해서 로그아웃 할 때까지의 한 단위를 말한다.

 

SCOTT 유저로 접속해서 SCOTT 유저로 로그아웃 할 때까지 이다.

 

즉, NLS_DATE_FORMAT 은 현재 세션 에서만 유효한 파라미터 이다.

 

만약에, SCOTT 유저로 로그아웃 했다가 재 접속 하면,

NLS_DATE_FORMAT은 RR/MM/DD 로 다시 초기화 된다. (기본값)

 

반응형