* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.
Window7 64bit | |
[cubrid_rel] 10.1.0.0003 (64bit) | |
[도움말]-[버전정보] 확인 | |
java, php, odbc 등 입력 |
* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.
에러 내용 및 재현 방법 | 재현 가능한 Source와 SQL |
관련 테이블(인덱스, 키정보 포함) 정보 | CUBRID 홈 디렉토리 아래 log 디렉토리 압축 |
-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------
[ 실행 1 ]
SELECT * FROM
( SELECT DATEDIFF(tkl.virtl_rsrv_date, SYSDATETIME) AS dff
FROM tord_order AS od
, tord_kcp_log AS tkl
WHERE od.pay_method = '40'
AND od.reserve_use_amt > 0
AND od.order_step = '15'
AND od.deposit_date > '2018-05-10'
AND od.order_no = tkl.order_no ) a
WHERE a.dff = -11
;
[실행 2]
SELECT * FROM
(SELECT DATEDIFF('20180519235959', SYSDATETIME) AS dff, 'abc' AS kkk FROM db_root) a
WHERE dff >=-11
위의 실행 2와 같은 쿼리 실행시 정상 조회가 가능하나
실행 1과 같이 쿼리를 실행하면 Cannot coerce value of domain "character varying" to domain "date". 와 같은 메세지가 실행 됩니다.
DATEDIFF 함수는 INTEGER 타입으로 리턴되는것으로 알고 있는데 where 부분에서 비교처리가 되지 않습니다.
메시지는 서로 비교시 컬럼의 타입이 동일해야합니다.
2번 수행시 결과가 나오는 것은 임의 값인 경우 내부적으로 변환해서 비교하여 결과가 나오는 것입니다.
(임의 값도 CAST문으로 감싸서 수행하는 것이 좋습니다.)
그러므로 1번 수행 쿼리문의 tkl.virtl_rsrv_date 타입이 varchar임으로 cast문 이용하면 결과가 나올 겁니다.
tkl.virtl_rsrv_date => CAST(tkl.virtl_rsrv_date as DATETIME) 변경해서 수행 해보십시오.