Oracle 과 PostgreSQL 에서 Timestamp 형 기원전, 후 수치 에 대한 상세 한 설명 및 JDBC 액세스

필드: 날짜
value1: 2010-01-01
value2: 2010-01-01BC
1. 데이터베이스 에 직접 수 치 를 삽입 할 때:
   Oacle 은 to 를 사용 해 야 합 니 다.timestamp('2010-01-01','yyyy-mm-ddBC'),
    PG 는 문자열 '2010 - 01 - 01BC' 를 직접 사용 할 수 있다.
 
2. 데이터베이스 에서 직접 조회 할 때:
   Oacle 데이터베이스 에서 date 필드 를 직접 조회 합 니 다. value 1 과 value 1 디 스 플레이 는 다 르 지 않 습 니 다. 모두 2010 - 01 - 01 입 니 다.
   사용 tochar (time, 'dd - mm - yyybc', 'nls date language = American') 에서 야 bc 와 ad 를 표시 합 니 다.다음 과 같다.
SQL> select time,to_char(time,'dd-mm-yyyybc','nls_date_language=American') AS TRUDATE;
 
TIME                                                        TRUEDATE
---------------------------------------------------------------------------
01-JAN-10 12.00.00.000000 AM        01-01-2010bc
01-JAN-10 12.00.00.000000 AM        01-01-2010ad

  PG 에서: 직접 조회 하면 BC 를 표시 할 수 있 습 니 다. 다음 과 같 습 니 다.
highgo=# select * from testtime;
id |          time
----+------------------------
  1 | 2010-01-01 00:00:00
  2 | 2010-01-01 00:00:00 BC

3. 자바 에 서 는 각각 value 1 과 value 2 의 문자열 값 (copy 에 사용) 과 시간 스탬프 값 (insert, 바 인 딩 매개 변수 에 사용) 을 가 져 옵 니 다.
          자바 코드:    
               
     System.out.println("DataType: "+rs.getMetaData().getColumnTypeName(1));          
           
     rs.next();
     System.out.println("getString:   " + rs.getString(1));
     Timestamp time1=  rs.getTimestamp(1);
     System.out.println("getTimestamp:   " + time1);
               
     rs.next();
     System.out.println("getString:   " + rs.getString(1));
     Timestamp time2=  rs.getTimestamp(1);
     System.out.println("getTimestamp:   " + time2);
 
     System.out.println("time1Compare2Time2:  "+ time1.compareTo(time2));

       Oracle 의 출력 결과:
       DataType:  TIMESTAMP         getString:   2010-01-01 00:00:00.0        getTimestamp:   2010-01-01 00:00:00.0        getString:   -2010-01-01 00:00:00.0                  getTimestamp:   2011-01-01 00:00:00.0            time1Compare2Time2:  1                             분석: 이 결 과 는 자바 가 얻 은 문자열 이 시간 기 호 를 가 진 것 임 을 설명 한다. 얻 은 시간 스탬프 는 기 호 를 가지 고 있 지 않 지만 비교 결 과 는 정확 하 다 (2010 - 01 - 01 은 2010 - 01 - 01 BC 보다 미래 적 이다). 그러나 얻 은 시간 스탬프 는 기호 가 없 는 기괴 한 값 이다. 인터넷 을 검색 하여 PG 문서 에 부합 되 는 해석 을 얻 었 다.(일치 하지만 정확성 은 보장 되 지 않 습 니 다. 더 확인 해 야 합 니 다.) BC 가 지정 되 었 다 면, year 를 무시 하고 내부 스토리 지 에 대해 하 나 를 추가 하 십시오. (Gregorian 캘 린 더 에는 year zero 가 없 으 므 로 numerically BC 1 은 year zero 가 됩 니 다.)BC 가 밝 혀 지면 연도 에 마이너스 와 하 나 를 더 해 내부 저장 에 사용 한 다 는 뜻 이다. 그 레 고리 역법 에는 0 년 이 없 기 때문에 숫자 상의 1BC 는 서기 0 년 이다.http://www.postgresql.org/docs/9.2/interactive/datetime-input-rules.html)
         PG 의 출력 결과:           
         DataType: timestamp          getString:   2010-01-02 00:00:00          getTimestamp:   2010-01-02 00:00:00.0          getString:   2010-01-02 00:00:00 BC          getTimestamp:   2010-01-02 00:00:00.0          time1Compare2Time2: 1          분석: 이 결과 의 문자열 은 기원전 을 표시 하지만 얻 은 시간 스탬프 는 아무런 차이 가 없 지만 두 시간 스탬프 를 비교 한 결 과 는 여전히 정확 하 다 (즉 2010 - 01 - 01 은 2010 - 01 BC 보다 미래 적 이다).
4. PG 에서 Timestamp 의 COPY 상황 테스트:   
      마이너스 시간 스탬프 (즉 기원전 시간) 는 copy 를 사용 할 수 없습니다.
      우 리 는 BC 가 있 는 시간 스탬프 를 테스트 하 러 왔 는데, 결 과 는 BC 가 있 는 시간 스탬프 는 copy 를 사용 할 수 있 었 다.
     텍스트 time. csv 에 다음 내용 을 저장 하고 copy testttime from 'G: / time. csv' with csv 를 사용 합 니 다. 결과 copy 가 성공 하여 데 이 터 를 조회 하 는 데 오류 가 없습니다.
"3","2011-01-02 00:00:00"
"4","2011-01-02 00:00:00 BC"

좋은 웹페이지 즐겨찾기