database.sarang.net의 "Oracle Q&A" 게시판에서 발견한 글에 아주 살짝 양념을 더했습니다.

원문 : database.sarang.net의 원문

 
"어떤 문자열에서 특정 문자를 구분 문자로 하여 나눴을때 마지막 문자열을 보여주고싶다."라고 할때... 음... 이걸 해결해 놓은게 아래의 쿼리입니다.
Oracle 10g R2와 Oracle Express Edition 11g에서 정상적으로 실행되는것을 확인하였습니다.

SELECT tablespace_name "테이블스페이스"
             , file_name "파일 이름"
            
 , SUBSTR(file_name, INSTR(file_name, '\', -1) + 1) as "1st"
             , REGEXP_SUBSTR(file_name, '[^\]+$')  as "2nd"
FROM dba_data_files;

물론 UNIX 장비라면 아래와 같이 역슬래쉬가 아니라 슬래쉬로 구분을 해야겠죠. ^^

SELECT tablespace_name "테이블스페이스"
             , file_name "파일 이름"
            
 , SUBSTR(file_name, INSTR(file_name, '/', -1) + 1) as "1st"
             , REGEXP_SUBSTR(file_name, '[^/]+$')  as "2nd"
FROM dba_data_files;

 테이블스페이스  파일 이름                   1st         2nd

-------------- ---------------------------------------- ------------- -------------
USERS  /u01/app/oracle/oradata/XE/users.dbf  users.dbf  users.dbf
SYSAUX  /u01/app/oracle/oradata/XE/sysaux.dbf  sysaux.dbf  sysaux.dbf
UNDOTBS1  /u01/app/oracle/oradata/XE/undotbs1.dbf  undotbs1.dbf  undotbs1.dbf
SYSTEM  /u01/app/oracle/oradata/XE/system.dbf  system.dbf  system.dbf



Oracle을 이용하면서 자주 사용하는 기능 중의 하나인 TO_CAHR을 이용해서 원하는 형태의 날짜 정보를 보여주는 방법에 대해서 정리해봅니다.

TO_CHAR(날짜, '표현방식'[, 'NLS정보'])

SELECT
       TO_CHAR(SYSDATE, 'YYYY.MM.DD') D_YYYYMMDD,
       TO_CHAR(SYSDATE, 'Y','NLS_DATE_LANGUAGE=KOREAN') D_Y,
       TO_CHAR(SYSDATE, 'YEAR','NLS_DATE_LANGUAGE=KOREAN') D_YEAR,
       TO_CHAR(SYSDATE, 'Year','NLS_DATE_LANGUAGE=KOREAN') D_YEAR_1,
       TO_CHAR(SYSDATE, 'MON') D_MON,
       TO_CHAR(SYSDATE, 'Mon') D_MON_1,
       TO_CHAR(SYSDATE, 'MONTH') D_MONTH,
       TO_CHAR(SYSDATE, 'Month') D_MONTH_1,
       TO_CHAR(SYSDATE, 'D') D_D,
       TO_CHAR(SYSDATE, 'DD') D_DD,
       TO_CHAR(SYSDATE, 'DDD') D_DDD,
       TO_CHAR(SYSDATE, 'DAY') D_DAY,
       TO_CHAR(SYSDATE, 'Day') D_DAY_1,
       TO_CHAR(SYSDATE, 'DY','NLS_DATE_LANGUAGE=KOREAN') D_DY,
       TO_CHAR(SYSDATE, 'Dy') D_DY_1
  FROM DUAL
 UNION ALL
SELECT
       TO_CHAR(SYSDATE, 'YYYY.MM.DD','NLS_DATE_LANGUAGE=AMERICAN') D_YYYYMMDD,
       TO_CHAR(SYSDATE, 'Y','NLS_DATE_LANGUAGE=AMERICAN') D_Y,
       TO_CHAR(SYSDATE, 'YEAR','NLS_DATE_LANGUAGE=AMERICAN') D_YEAR,
       TO_CHAR(SYSDATE, 'Year','NLS_DATE_LANGUAGE=AMERICAN') D_YEAR_1,
       TO_CHAR(SYSDATE, 'MON','NLS_DATE_LANGUAGE=AMERICAN') D_MON,
       TO_CHAR(SYSDATE, 'Mon','NLS_DATE_LANGUAGE=AMERICAN') D_MON_1,
       TO_CHAR(SYSDATE, 'MONTH','NLS_DATE_LANGUAGE=AMERICAN') D_MONTH,
       TO_CHAR(SYSDATE, 'Month','NLS_DATE_LANGUAGE=AMERICAN') D_MONTH_1,
       TO_CHAR(SYSDATE, 'D','NLS_DATE_LANGUAGE=AMERICAN') D_D,
       TO_CHAR(SYSDATE, 'DD','NLS_DATE_LANGUAGE=AMERICAN') D_DD,
       TO_CHAR(SYSDATE, 'DDD','NLS_DATE_LANGUAGE=AMERICAN') D_DDD,
       TO_CHAR(SYSDATE, 'DAY','NLS_DATE_LANGUAGE=AMERICAN') D_DAY,
       TO_CHAR(SYSDATE, 'Day','NLS_DATE_LANGUAGE=AMERICAN') D_DAY_1,
       TO_CHAR(SYSDATE, 'DY','NLS_DATE_LANGUAGE=AMERICAN') ADA,
       TO_CHAR(SYSDATE, 'Dy','NLS_DATE_LANGUAGE=AMERICAN') ADA
  FROM DUAL;

 실행해보시면 재미난 결과가 나옵니다.
NLS_DATE_LANGUAGE를 AMERICAN으로 해주면 대소문자를 가려서 나오네요.
아래가 결과값입니다.

1 : 2009.06.10    9    TWO THOUSAND NINE    Two Thousand Nine    6월     6월     6월     6월     4    10    161    수요일    수요일    수    수
2: 2009.06.10    9    TWO THOUSAND NINE    Two Thousand Nine    JUN    Jun    JUNE         June         4    10    161    WEDNESDAY    Wednesday    WED    Wed


 가끔씩 쓰긴하는데, 기억이 잘 안나는 쿼리문입니다.
연속된 숫자를 발생시키는 쿼리입니다. 아래의 쿼리문은 연속된 숫자를 발생시키고 이를 DATE형으로 바꿔서 한해의 일자를 연속으로 만들어주는 쿼리입니다.


1. 특정숫자까지의 연속된 숫자를 발생시키는 쿼리입니다.
SELECT level
  FROM DUAL
CONNECT BY level<=특정숫자;

2. 응용해서 그해의 일자를 1월1일부터 12월 31일까지 발생 시켜주는 쿼리입니다.
SELECT TO_DATE(TO_CHAR(level, '000'), 'ddd')
  FROM DUAL
CONNECT BY level<=TO_NUMBER(TO_CHAR(TO_DATE('12-31', 'MM-DD'), 'DDD'));

+ Recent posts