timestamp에 관한 질문입니다. 0 9 4,114

by visca구루비 [SQL Query] timestamp time stamp 타임스탬프 타임스템프 날짜 날짜변환 [2015.11.13 15:57:18]


h2콘솔로 오라클 DB접속하여서 저장되어 있는 값을 조회하려고 합니다.

그래서 select * from 테이블명 해서 조회했더니

날짜를 저장하는 곳에 10자리숫자로 되어 있습니다.

ex) 1397316900, 1397316960

그래서 일정 기간의 날짜만 where 조건으로 검색해서 조회하려고 하는데

SELECT * FROM 테이블명

WHERE TO_CHAR(컬럼명, 'YYYY-MM-DD') >= TO_CHAR(컬럼명, '2015-11-12')
AND TO_CHAR(컬럼명, 'YYYY-MM-DD') < TO_CHAR(컬럼명, '2015-11-13')

로도 해보고

SELECT * FROM 테이블명
WHERE TO_CHAR(TO_DATE(컬럼명, 'YYYY-MM-DD'), 'YYYY-MM-DD') >= TO_DATE(TO_CHAR(컬럼명, '2015-11-12'), '2015-11-12')
AND TO_CHAR(TO_DATE(컬럼명, 'YYYY-MM-DD'), 'YYYY-MM-DD') < TO_DATE(TO_CHAR(컬럼명, '2015-11-13'), '2015-11-13')

로도 해보았는데 

위에 쿼리 에러 : ORA-01481: invalid number format model

아래 쿼리 에러 : ORA-01861: literal does not match format string

가 납니다... 어떻게 해결하나요???ㅜㅜ

by terry0515 [2015.11.13 16:03:53]

오라클은 모르지만 -_-;

1. 위의 쿼리

 
WHERE TO_CHAR(컬럼명, 'YYYY-MM-DD') >= '2015-11-12'
AND TO_CHAR(컬럼명, 'YYYY-MM-DD') < '2015-11-13'
 
저렇게 바꾸면 될듯한데요?
 
한가지 이상한점은
조건상에 2015-11-12 이상이고, 2015-11-13 보다 작다면..
결과적으로 2015-11-12 라는 조건값 하나인데
왜 2개의 조건이 들어갔는지 ^^;;
 
>= < 방법도 있고
WHERE TO_CHAR(컬럼명, 'YYYY-MM-DD') Between '2015-11-12' And '2015-11-12'
 
저 형태도 가능해요..
 
참고만 하세요.

by visca구루비 [2015.11.13 16:07:08]

하나의 데이터만 출력하려고 합니다.

밑에 있는 between 방식으로 한번 해봐야겠네요 ㅎㅎ

감사합니다^^
 

ㄴ 16:09 : 다시 해봤는데 위에 에러하고 똑같은 에러가 나네요ㅠㅠ 2일째 해결을 못하고 있어요


by terry0515 [2015.11.13 16:28:33]

아 -_-;;; 10자리 숫자군요..

http://www.gurubee.net/article/22371

http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=qna_db&wr_id=156659

상기 링크 참고해보세요..

 

SELECT TO_DATE('1970-01-01 09:00:00','YY-MM-DD HH24:MI:SS') + (1267475388 / 86400)
 FROM DUAL

 

저리 되 있는걸로 봐서..

 

WHERE TO_CHAR(TO_DATE('1970-01-01 09:00:00','YYYY-MM-DD HH24:MI:SS') + (컬럼명 / 86400), 'YYYY-MM-DD') Between '2015-11-12' And '2015-11-12'

 

저리 바꾸면 될거 같기는 한데..

오라클을 안써봐서 모르겠네요^^;;


by visca구루비 [2015.11.13 17:04:28]

SELECT TO_DATE('1970-01-01','YY-MM-DD') + (컬럼명 / 86400) 
 FROM 테이블명

이렇게 하니까 되더라구요ㅠㅠ

 

여기에서 해당 테이블에 저장된 모든 값을을 조건 하나를 걸어서 불러올수 있게는 어떻게 하나요??


by 겸댕2후니 [2015.11.13 17:10:22]

ex) 1397316900, 1397316960

위의 값이 정확히 어떤값인지 부터 확인하셔야 될 것 같아요.

위의값이 지금말씀드리는 형식과 같지 않겠지만

만약 형식이 년월일시간분(ex 오늘 : 1511131709)

라면 to_date(컬럼명, 'YYYYMMDDHH24MI') 로 하시면 될 것 같아요.


by visca구루비 [2015.11.13 17:12:11]

댓글 작성하고 고민을 좀더 하니까 해결되었습니다

다시 댓글을 수정했는데 그건 모르겠어요ㅠㅠ


by 손님 [2015.11.13 18:10:32]
Where  TO_DATE('1970-01-01','YYYY-MM-DD') (컬럼명 / 86400) between '2015-11-12' and '2015-11-12'

로 해보세요..오류나면
To_char (to_date~~/86400)) 로 한번 싸주시구요.

by 마농 [2015.11.15 12:54:44]
-- 컬럼을 가공하여 조건의 형식에 맞추는건 비효율이죠.
-- 조건을 가공하여 컬럼의 형식에 맞추세요.
 WHERE 컬럼 >= (TO_DATE('2015-11-12', 'yyyy-mm-dd') - TO_DATE('1970-01-01', 'yyyy-mm-dd')) * 24*60*60
   AND 컬럼 <  (TO_DATE('2015-11-13', 'yyyy-mm-dd') - TO_DATE('1970-01-01', 'yyyy-mm-dd')) * 24*60*60
;

 


by visca구루비 [2015.11.16 10:40:57]

감사합니다^^

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