Powerbuilder>


table test 의 컬럼이 empno,name,deptname,address,phone (사번,이름,부서명,주소,전화번호) 라고 할때 datawindow를 디자인할때 주소로 검색할 경우 retrieve argument를 r_address 라고 할때


select empno,name,deptname,address,phone

   from test

 where address = :r_address;


로 정의한다.


그런데, 전체를 검색하기 위해 r_address 의 값을 '%'로 주었을 경우 address 컬럼이 null인 경우는 가져오지 못한다.

이럴 경우 다음과 같이 한다.


select empno,name,deptname,address,phone

   from test

 where ((address = :r_address) or (address is null and :r_address = '%'))




'DBMS > 오라클기타' 카테고리의 다른 글

월별 일자  (0) 2013.05.03
sqlplus spool 이용  (0) 2013.05.03
oracle character set 변경.  (0) 2013.05.03
주차 구하기  (0) 2013.05.03
오라클 날짜함수  (0) 2013.05.03




SQL> SHUTDOWN IMMEDIATE;

SQL> STARTUP MOUNT;

SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;

SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;

SQL> ALTER DATABASE OPEN;

SQL> ALTER DATABASE CHARACTER SET AL32UTF8;

SQL> SHUTDOWN IMMEDIATE;

SQL> STARTUP;



'DBMS > 오라클기타' 카테고리의 다른 글

sqlplus spool 이용  (0) 2013.05.03
컬럼이 null인 경우는 조회조건  (0) 2013.05.03
주차 구하기  (0) 2013.05.03
오라클 날짜함수  (0) 2013.05.03
SYNONYM  (0) 2013.05.03



-- 년

SELECT TO_CHAR( TO_DATE('20090913','YYYYMMDD'),'IW')    WEEK

           , TRUNC( TO_DATE('20090913','YYYYMMDD'),'IW')       STA_YMD

           , TRUNC( TO_DATE('20090913','YYYYMMDD'),'IW')+6    END_YMD

  FROM DUAL

 ;

 

-- 월

SELECT '20090913'  AS YMD

           , CEIL( ( TO_NUMBER(SUBSTRB('20090913', -2, 2)) +7 - TO_NUMBER( TO_CHAR( TO_DATE( '20090913','YYYYMMDD' ), 'D' ) ) ) / 7 )  AS MON_WEEK

  FROM DUAL

  ;


'DBMS > 오라클기타' 카테고리의 다른 글

컬럼이 null인 경우는 조회조건  (0) 2013.05.03
oracle character set 변경.  (0) 2013.05.03
오라클 날짜함수  (0) 2013.05.03
SYNONYM  (0) 2013.05.03
SYS_CONNECT_BY_PATH  (0) 2013.05.03



오라클 날짜함수 

# 날짜계산

select months_between(sysdate,to_date('2002-12-22','yyyy-mm-

dd')) 

-- months_between(A,B) = A-B/30

--select add_months(sysdate,4) -- 특정일의 달수 더한 날

--select next_day(sysdate,'friday') -- 특정일의 다음주 요일

--select last_day(sysdate) -- 특정일의 해당 월의 마지막 날

--select round(sysdate,'dd') -- 특정일의 반올림(오후면 다음날..)

--select trunc(sysdate,'ww') -- 특정일의 전주 토요일(해당 전주의 마지막 날)에해당하는 날짜

--select trunc(sysdate,'D') -- 특정일의 주 일요일(해당 주의 첫째 날)에해당하는 날짜

from dual

 

/* 어제 */ 날짜칼럼 BETWEEN TRUNC(SYSDATE-1) AND TRUNC(SYSDATE-1)+0.99999421

/* 오늘 */ 날짜칼럼 BETWEEN TRUNC(SYSDATE) AND TRUNC(SYSDATE) + 0.99999421

/* 내일 */ 날짜칼럼 BETWEEN TRUNC(SYSDATE+1) AND TRUNC(SYSDATE+1)+0.99999421

/* 금주 */ 날짜칼럼 BETWEEN TRUNC(SYSDATE+1)-TO_CHAR(SYSDATE,'D') 

                        AND TRUNC(SYSDATE+1)-TO_CHAR(SYSDATE,'D')+6.99999421

/* 차주 */ 날짜칼럼 BETWEEN TRUNC(SYSDATE+8)-TO_CHAR(SYSDATE, 'D') 

                        AND TRUNC(TRUNC(SYSDATE)+14.99999421)-TO_CHAR(SYSDATE, 'D')

/* 금월 */ 날짜칼럼 BETWEEN TRUNC(SYSDATE+1)-TO_CHAR(SYSDATE,'DD') 

                        AND TRUNC(LAST_DAY(SYSDATE))+0.99999421

/* 전월 */ 날짜칼럼 BETWEEN TRUNC(ADD_MONTHS(SYSDATE,-1)+1)-TO_CHAR(SYSDATE,'DD') 

                        AND TRUNC(LAST_DAY(ADD_MONTHS(SYSDATE, -1)))+0.99999421

/* 차월 */ 날짜칼럼 BETWEEN ADD_MONTHS(TRUNC(SYSDATE),1)-TO_CHAR(SYSDATE,'DD')+1 

                        AND LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE),1)+0.99999421)

 

 

# 특정일 까지의 간격을 년, 개월, 일로 표현하기

SELECT 

TRUNC(MONTHS_BETWEEN(SYSDATE, TO_DATE('19970101', 'YYYYMMDD'))/12) "년", 

TRUNC(MONTHS_BETWEEN(SYSDATE, TO_DATE('19970101', 'YYYYMMDD')) - 

TRUNC(MONTHS_BETWEEN(SYSDATE, TO_DATE('19970101', 'YYYYMMDD'))/12) * 12) "개월", 

TRUNC((MONTHS_BETWEEN(SYSDATE,TO_DATE('19970101', 'YYYYMMDD')) - 

TRUNC(MONTHS_BETWEEN(SYSDATE, TO_DATE('19970101', 'YYYYMMDD')))) * 30.5) "일" 

FROM DUAL;

 


# 당월의 주차 구하기..

SELECT 

'20040511' as "날짜" 

, ceil((to_number(substrb('20040511', -2, 2)) + 7 - to_number(TO_CHAR(TO_DATE('20040511','YYYYMMDD'),'D')))/7) as "월별 주차" 

from dual;


 

# 시간 계산 SQL 

SELECT TRUNC(TO_DATE('20010502223443','YYYYMMDDHH24MISS')-TO_DATE('20010501213344','YYYYMMDDHH24MISS')) || ' day ' || 

       TRUNC(MOD((TO_DATE('20010502223443','YYYYMMDDHH24MISS')-TO_DATE('20010501213344','YYYYMMDDHH24MISS')),1)*24) || ' hour ' || 

       TRUNC(MOD((TO_DATE('20010502223443','YYYYMMDDHH24MISS')-TO_DATE('20010501213344','YYYYMMDDHH24MISS'))*24,1)*60) || ' minute ' || 

       TRUNC(ROUND(MOD((TO_DATE('20010502223443','YYYYMMDDHH24MISS')-TO_DATE('20010501213344','YYYYMMDDHH24MISS'))*24*60,1)*60)) || ' sec ' 

       " Time Interval " 

FROM DUAL ;



'DBMS > 오라클기타' 카테고리의 다른 글

oracle character set 변경.  (0) 2013.05.03
주차 구하기  (0) 2013.05.03
SYNONYM  (0) 2013.05.03
SYS_CONNECT_BY_PATH  (0) 2013.05.03
Marge  (0) 2013.05.03



CREATE SYNONYM 별칭명 FOR table명;


'DBMS > 오라클기타' 카테고리의 다른 글

주차 구하기  (0) 2013.05.03
오라클 날짜함수  (0) 2013.05.03
SYS_CONNECT_BY_PATH  (0) 2013.05.03
Marge  (0) 2013.05.03
두개이상 칼럼에 UPDATE하기  (0) 2013.05.03

+ Recent posts