오라클 Query 왜 이런 결과가 나올까요??? 0 7 1,523

by InsideCore [2012.10.17 16:37:33]



고수님들..답변 부탁드립니다.

현재 Oracle DB Version은
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0  입니다.

그리고 아래 SQL 실행문 입니다.

SELECT SYSDATE
  ,DECODE('1', '1', SYSDATE, NULL) AS col_1
  ,DECODE('1', '2', NULL, SYSDATE) AS col_2
FROM DUAL;


결과

------------------------------------------------------------------------------------------------------
No  |    SYSDATE      |     COL_1 |   COL_2   |
1    | 2012-10-17 오후 4:28:45 | 2012-10-17 오후 4:28:45 | 17-OCT-12 |
------------------------------------------------------------------------------------------------------

왜 이런 결과가 나올까요..

예상대로라면  COL_2의 값도.
COL_1과 같아야 된다고 보는데..

이상하게 나오네요...

원인이 뭘까요??

by 손님 [2012.10.17 16:49:25]
decode(expr,search1,result1,search2,result2 . . .)
비교하기 전에 expr과 각 search값을 처음 search의 데이터형으로 변환한다.
자동적으로 처음 result와 같은 데이터형으로 반환값을 변환한다.
만약 처음 result가 CHAR데이터 형이거나 NULL이라면,
VARCHAR2형으로 반환값을 변환한다.

by 손님 [2012.10.17 16:53:35]
SELECT SYSDATE
  ,DECODE('1', '1', SYSDATE, NULL) AS col_1
  ,DECODE('1', '2', cast(NULL AS DATE), SYSDATE) AS col_2
FROM DUAL

결과:
 2012-10-17 오후 4:51:27 2012-10-17 오후 4:51:27  2012-10-17 오후 4:51:27

by 부쉬맨 [2012.10.17 17:03:31]
SELECT SYSDATE
  ,DECODE('1', '1', SYSDATE, NULL) AS col_1
  ,DECODE('1', '2', SYSDATE,sysdate) AS col_2
  ,DECODE('1', '1', to_char(SYSDATE,'yyyymmddhhss'), NULL) AS col_3
  ,DECODE('1', '2', NULL, to_char(SYSDATE,'yyyymmddhhss')) AS col_4
FROM DUAL;

이렇게하면또되네요..

추측입니다.

session 단위에서 가져와야되는데
sysdate를 database 단이나 instrance 단에서 가져오고있나보네요.


by 마농 [2012.10.17 20:06:49]

부쉬맨~ 땡~
Decode구문의 결과는 앞뒤 타입이 맞아야 하므로
아무 표시 없는 Null 은 일딴 String 형으로 간주함
앞에가 String 이니 뒤에 따라 오는 date 형이 String 형으로 자동 형변환됨.


by 부쉬맨 [2012.10.17 20:23:26]

왠지 자동으로 변환할꺼같았는데 
정확한원리를 몰라서 
좋은거배웠슴...신기하기도했고

by InsideCore [2012.10.18 08:44:15]

답변 감사합니다..

by kj2hw [2012.10.18 19:03:32]

아하 좋은 것 배워갑니다~
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입