본문 바로가기

ORACLE11g/SQL

[11gSQL] 2장 날짜 형식 변경, 치환변수

#2-7


-Session의 default 날짜 형식을 확인해본다.


SQL> SELECT sysdate FROM dual;


SYSDATE

------------

15-AUG-16


SQL> exit


방법 1. 세션의 Default날짜 형식 변경-환경변수 사용


클라이언트 환경 cmd창


C:\Users\Administrator>SET NLS_DATE_FORMAT=YYYY-MM-DD


C:\Users\Administrator>sqlplus usera/oracle@192.168.10.11:1521/orcl.oraedu.com


SQL> SELECT sysdate FROM dual;


SYSDATE

----------

2016-08-15


방법 2. 세션의 Default날짜 형식 변경-ALTER SESSION SET명령 사용


SQL> ALTER SESSION SET NLS_DATE_FORMAT='DD-MON-RR';


Session altered.


SQL> SELECT sysdate FROM dual;


SYSDATE

------------

15-AUG-16



입사일자가 1981년 1월 1일 이후인 사람 출력.


SQL> SELECT * FROM emp WHERE hiredate >= '01-JAN-81';



입사일자가 1981년 1월 1일 이후이고 1981년 12월 31일 이전인 사람


SQL> SELECT * FROM emp WHERE hiredate >= '01-JAN-81' AND '31-DEC-81;


아래의 방법으로도 가능 (권장사항)


SQL> SELECT * FROM emp WHERE hiredate BETWEEN '01-JAN-81' AND '31-DEC-81';


결과는 같다.



job이 'CLERK'인 사람, 'SALESMAN'인 사람, 'MANAGER'인 사람 출력


방법1.

SQL> SELECT * FROM emp WHERE job = 'CLERK' OR job = 'SALESMAN' OR job = 'MANAGER';


방법2.

SQL> SELECT * FROM emp WHERE job IN ('CLERK' , 'SALESMAN', 'MANAGER');


방법3.

SQL> SELECT * FROM emp WHERE job = 'CLERK'

       UNION ALL

       SELECT * FROM emp WHERE job = 'SALESMAN'

       UNION ALL

       SELECT * FROM emp WHERE job = 'MANAGER';


1번과 2번은 완전하게 같은 결과, 3번은 결과는 같지만 정렬은 다르다.


#2-12


테스트 테이블 t1 생성


 drop table t1 purge;

  create table t1 (col1 varchar2(10));

  insert into t1 values('AAA');

  insert into t1 values('ABA');

  insert into t1 values('A_A');

  insert into t1 values('A__A');

  commit;


SQL> select * FROM t1;


COL1

--------------------

AAA

ABA

A_A

A__A


SQL> SELECT * FROM t1 WHERE col1 LIKE '_\_%' ESCAPE '\';


COL1

--------------------

A_A

A__A


SQL> SELECT * FROM t1 WHERE col1 LIKE '_!_%' ESCAPE '!';


COL1

--------------------

A_A

A__A


SQL> SELECT * FROM t1 WHERE col1 LIKE '_^_%' ESCAPE '^';


COL1

--------------------

A_A

A__A



입사년도에 관계없이 입사월 순으로 sort(정렬) 하기


SQL> SELECT empno, ename, sal, hiredate, TO_CHAR(hiredate, 'MON') FROM emp ORDER BY hiredate;

입사월 순으로 정상적으로 정렬되지 않음.


SQL> SELECT empno, ename, sal, hiredate, TO_CHAR(hiredate, 'MON') FROM emp;


SQL> SELECT empno, ename, sal, hiredate, TO_CHAR(hiredate, 'MM') FROM emp;


SQL> SELECT empno, ename, sal, hiredate, TO_CHAR(hiredate, 'MM') FROM emp ORDER BY TO_CHAR(hiredate, 'MM');

입사월 순으로 정상적으로 정렬됨.



# 2-22 치환변수


SQL> SELECT * FROM emp WHERE deptno = &d1;


SQL> SELECT * FROM emp WHERE deptno = &&a1;


SQL> DEFINE a1

DEFINE A1              = "20" (CHAR)


SQL> UNDEFINE a1


&변수명은

실행시에 변수명값이 있으면 값을 달라고 요구하지 않음.

실행시에 변수명값이 없으면 값을 달라고 요구하여 그 값을 받아 써먹고 변수값을 clear함.


&&변수명은

실행시에 변수명값이 있으면 값을 달라고 요구하지 않음.

실행시에 변수명값이 없으면 값을 달라고 요구하여 그 값을 받아 써먹고 변수값을 clear하지 않음.


생각해 볼 문제.

언제 &을 쓰고 언제 &&을 쓸 것인가?


※치환변수(797참조)