728x90

히로님 | 개발 | 2013-05-29 20:51:41


안녕하세요. DB2는 처음 쓰는 개발자 입니다.
운영DB export후 local로 import 하여 사용하고 있습니다.

날짜 관련 연산에서 쿼리를 수행하게 되면
SQL0182N  날짜 시간 값 또는 레이블된 지속 기간을 갖는 표현식이 유효하지 않습니다.  SQLSTATE=42816

위와 같은 메시지가 나네요.
timestamp 값에서 현재(sysdate -3) 시간을 빼서 최신 글을 몇개를 가지고 오는 쿼리 인듯 합니다.
ex) select   case test_date < sysdate - 3
                     then 0 else 1
                   end flag
           from aaa

헌데, 운영에서는 잘 됩니다..-_-
....._VECTOR=ORA 설정까지 한 상태 이고 
dual로 sysdate - 3 하면 잘 수행 됩니다.(select sysdtae - 3 from dual)
어떤 설정을 해야 sysdate 관련해서 연산을 할 수 있을까요?
도움좀 주세요!

감사합니다.




pajama 2013-05-29 21:38:30
안녕하세요 해당 연산을 수행하려면 DB2_COMPATIBILITY_VECTOR=ORA로 설정을 한 상태에서 DB를 만들어야 합니다.

'db2 get db cfg' 명령 출력에서 Date compatibility 설정이 on인지 확인해보십시오 이 설정은 DB를 생성할때 적용됩니다.

만일 OFF로 되어있다면 sysdate -3 과 같은 연산을 지원하지 않습니다.


히로 2013-05-30 17:18:25
pajama님 말씀대로 VECTOR 설정은 on이지만 콘솔에서 확인해보니 
날짜 호환성 속성이 OFF 네요.ㅜㅜ
다시 DB를 생성하는데 해당 속성을 on으로 하고 만들려면 어떻게 해야 하나요?

지기 2013-05-30 14:55:59
db2 "select sysdate -3 day from sysibm.sysdummy1"

단위는 year, month, day, hour, minute, second 입니다.

DB2_COMPATIBILITY_VECTOR=ORA 설정 하지 않아도 됩니다.


히로 2013-05-30 17:18:53
지기님 답변 감사합니다.
헌데 질문의 요는 timestamp 컬럼과 sysdate-3의 날짜연산이 문제네요.ㅜㅜ


pajama 2013-05-31 00:00:07
해당 속성 (Date compatibility)을 on으로 DB를 만드려면, 만들기전에 db2set DB2_COMPATIBILITY_VECTOR=ORA 하시고 create database ...하시면 됩니다. DB를 생성한 후에는 DB2_COMPATIBILITY_VECTOR=ORA 설정값에 관계없이 말씀하신 연산이 가능합니다.

지기 2013-05-30 18:09:04
db2 "create table aaa (c1 timestamp,c2 char(8),c3 char(5),c4 varchar(10))"
db2 "insert into aaa values(current timestamp,'AAA','BBB','CCC')"
db2 "insert into aaa values(current timestamp,'AA1','BB1','CC1')"
db2 "insert into aaa values(current timestamp,'AA2','BB2','CC2')"
db2 "insert into aaa values(current timestamp,'AA3','BB3','CC3')"
db2 "insert into aaa values(current timestamp,'AA4','BB4','CC4')"
db2 "select * from aaa"

C1 C2 C3 C4
-------------------------- -------- ----- ----------
2013-05-30-17.47.48.694344 AAA BBB CCC
2013-05-30-17.47.58.844898 AA1 BB1 CC1
2013-05-30-17.48.05.732783 AA2 BB2 CC2
2013-05-30-17.48.14.461513 AA3 BB3 CC3
2013-05-30-17.48.23.076692 AA4 BB4 CC4

db2 "select case when c1 > sysdate -3 hour then 0 else 1 end flag from aaa"

FLAG
-----------
0
0
0
0
0

도움이 되실런지 모르겠습니다.

히로 2013-06-03 17:14:31
모두 답변 감사 드립니다
덕분에 해결 하였네요.^^



728x90

+ Recent posts