복붙노트

[SQL] 사이베이스의 신비 '타임 스탬프'데이터 형식은 무엇입니까?

SQL

사이베이스의 신비 '타임 스탬프'데이터 형식은 무엇입니까?

나는 최근에 유형 '타임 스탬프'의 열을 사용하는 직장에서 우리의 Sybase 데이터베이스에서 테이블을 발견했다. 이 같은이 신비로운 타임 스탬프 데이터 유형을 사용하여 테이블을 작성하는 경우

create table dropme (
    foo timestamp,  
    roo int null
)
insert into dropme (roo) values(123)
insert into dropme (roo) values(122)
insert into dropme (roo) values(121)
select * from dropme
go

나는 'dropme에서 선택 *'에서 다음 얻을 :

 foo                  roo
 -------------------- -----------
   0x000100000e1ce4ea         123
   0x000100000e1ce4ed         122
   0x000100000e1ce509         121

0x000100000e1ce4ea은 나에게 매우 timestampy 보이지 않는다. 또한, 나는 'sp_help는 타임 스탬프'에서이 출력을 참조하십시오

 Type_name Storage_type Length Prec Scale Nulls Default_name Rule_name Access_Rule_name Identity
 --------- ------------ ------ ---- ----- ----- ------------ --------- ---------------- ----------
 timestamp varbinary         8 NULL  NULL     1 NULL         NULL      NULL                   NULL

해결법

  1. ==============================

    1.타임 스탬프는 도대체 무엇인가?

    타임 스탬프는 도대체 무엇인가?

    타임 스탬프 데이터 형식으로 정의되고

    varbinary(8) null
    

    그것은 시간이나 날짜에 전혀 어떤 관계가 있습니까?

    제 이름은 제대로 선택되었다.

    나는이 날짜로 변환 할 수 있습니까?

    아니.

    그는 시간이나 날짜, 당신은 무엇을 위해 그것을 사용합니까하지 않으면?

    타임 스탬프 열과 행이 삽입되거나 업데이트 될 때마다 타임 스탬프 열이 자동으로 업데이트된다. 타임 스탬프 두 가지 사실이 있음을 유의하십시오. TIMESTAMP 및 CURRENT TIMESTAMP. 차이점은 CURRENT TIMESTAMP는 삽입에 설정되어 있다는 점이다.

    사이베이스의 문서는 f는 * 무지개 * 케이 누구도 데이터 유형 타임 스탬프를 사용하는 것이 왜 나를 궁금 떠나 거기를 중단했다. 다행히도 나는 다른 토론을 발견하고 낙관적 동시성 제어를 구현할 때의 사용 추론.

    동시성 제어 여러 트랜잭션이 올바른 데이터 결과 여전히 동시에 해결 / 실행될 수 있음을 보장하는 방법이다. 낙관적 동시성 제어는 서로 간섭하지 않고 다수의 트랜잭션 완료를 가정 동시성 제어 방법이다. 즉 어떤 잠금이 필요하지 않습니다. 위키 백과는 다음과 같은 알고리즘을 설명합니다 :

    사이베이스의 timestamp 데이터 유형은 1 단계와 대신 날짜 / 시간을 사용하는이 알고리즘의 3에 사용될 수 있습니다. 이 날짜 시간 데이터 유형을 사용하는 동안 당신에게 많은 작업을 절약 할 수처럼 그러나 그것은 나에게 보이지 않는다. 나는 그것이 더 잘 수행 할 수 있다고 가정.

  2. ==============================

    2.이 날짜에 TIMESTAMP SYBASE IQ의 데이터 형식을 변환 할 수있는 경우 최근 누군가가 나에게 물었다; 이 어둠 때문에 나는 항상이 데이터 형식을 피할 수있다. SYBASE 문서를 읽고 몇 가지 테스트를 만드는 시간의 일부 쌍 한 후, 여기 내 결론은 다음과 같습니다 :

    이 날짜에 TIMESTAMP SYBASE IQ의 데이터 형식을 변환 할 수있는 경우 최근 누군가가 나에게 물었다; 이 어둠 때문에 나는 항상이 데이터 형식을 피할 수있다. SYBASE 문서를 읽고 몇 가지 테스트를 만드는 시간의 일부 쌍 한 후, 여기 내 결론은 다음과 같습니다 :

    타임 스탬프 :

    다음 날짜에 타임 스탬프를 변환하기위한 SQL 문장은 다음과 같습니다

    SELECT timestamp as TS, CONVERT(decimal, timestamp) as TS_IN_MS,
       CONVERT(date, dateadd(SS, CONVERT(int, SUBSTRING(CONVERT(varchar,                     
          CONVERT(decimal, timestamp)), 1, 9)), '1/1/1970'), 123)  as TS_AS_DATE  
       FROM TheTable
    

    변환은 다음과 같은 온라인 EPOCH 컨버터를 사용하여 입증 할 수있다 :

    참고 : SYBASE ASE의 경우, 타임 스탬프 형식은 유효한 UNIX-EPOCH 없습니다.

  3. ==============================

    3.(이 여기에 추가 할 담당자없이 신비 사이베이스 ASE '타임 스탬프'사용자에 의한 데이터 타입 질문에 대한 별도의 질문 답변으로 게시에 대한 답변입니다. 저는 제 신용 싶지 않기 때문에 나는 커뮤니티 위키로 복사 한 그것은하지만) 여기해야한다 위해

    (이 여기에 추가 할 담당자없이 신비 사이베이스 ASE '타임 스탬프'사용자에 의한 데이터 타입 질문에 대한 별도의 질문 답변으로 게시에 대한 답변입니다. 저는 제 신용 싶지 않기 때문에 나는 커뮤니티 위키로 복사 한 그것은하지만) 여기해야한다 위해

    Q # 1 답변 : '도대체 타임 스탬프 무엇입니까?'

    데이터베이스가 온라인 상태가 될 때이 테이블이 내장되어 있습니다 - • 사이베이스 ASE 데이터베이스의 타임 스탬프는 해당 데이터베이스의 내부 메모리 테이블 'DBTABLE'중앙에 개최됩니다. 당신은 선택 @@ DBTS하여 현재 DB 타임 스탬프를 조회 할 수 있습니다 -주의 해주십시오 VARBINARY (8) '데이터베이스'타임 스탬프 값은 소형 엔디 언 대 빅 대상 즉 의존하는 플랫폼이다.

    • 각 사용자 테이블은 주어진 행의 INSERT / UPDATE의 '데이터베이스'타임 스탬프 값을 유지하기위한 하나의 타임 스탬프 열을 가질 수있다. 모든 '표'타임 스탬프 열 값은 자동으로 TSQL DML 명령의 성공적인 완료에 (단지 ID 열 등) ASE에 의해 유지된다. 그들은 항상 (자세한 내용은 아래 자세한 내용 참조)에 관계없이 O / S 플랫폼의 엔디안 빅 - 엔디안 바이트 순서에 보존되므로 그러나, '데이터베이스'timestsamp는 달리, '테이블'타임 스탬프 값은 플랫폼 독립적이다.

    Q # 2에 대한 답변 : '은 시간이나 날짜에 전혀 어떤 관계가 있는가?'

    아니, '데이터베이스'타임 스탬프 페이지의 값은 '지역'타임 스탬프는 실제 날짜 / 시간을 반영하지 않습니다.

    Q # 3 답변 : '나는 날짜로 변환 할 수 있습니까?'

    아니, 당신은 '데이터베이스'타임 스탬프 또는 날짜 / 시간 값에 그 페이지의 '지역'타임 스탬프를 변환 할 수 없습니다.

    Q # 4 답변 : '이 아니 시간이나 날짜는, 당신이 그것을 사용하는 경우?'

    데이터베이스 내의 페이지가 수정 또는 다음 시간에 그 시점의 '데이터베이스'타임 스탬프와 동기화 영향을받는 페이지의 '지역'타임 스탬프 동안 (그 페이지 헤더 내에서) 만들어 질 때마다 • '데이터베이스'타임 스탬프은 1 씩 증가합니다.

    하여 현재의 '데이터베이스'타임 스탬프와 비교했을 때 • 데이터베이스 페이지의 '지역'타임 스탬프를 생성 먼저 해당 페이지의 마지막 업데이트하거나 상대 연령을 반영; 따라서, ASE는 / 데이터베이스 내의 모든 페이지를 만들고 업데이트의 시간 순서를 알 수 있습니다.

    • 응용 프로그램에 관계없이 행의 키 값의 가장 최근에 또는 가장 최근에 삽입 / 갱신 된 행을 찾기 위해 ID 열과 비슷한 방식으로 '표'타임 스탬프 열을 사용할 수있다.

    또한 정보, 경고 및주의 사항 : -

    (1) '데이터베이스'종속 '로컬'타임 스탬프 3 부에 저장되어있다 OS 플랫폼 엔디안. 예를 들면 0xHHHH 0000 LLLLLLLL

    (2) 사용자 테이블 '소인도 3 부에 저장하지만 빅 엔디안 방향 항상. 예를 들면 0000 HHHH LLLLLLLL

    (3) (a 데이터베이스 행하게 될 때 생성되는) 소정의 데이터베이스 메모리 시스템 테이블에 유지 DBTABLE 소인 데이터베이스.

    참고 - 지금 제품 ASE를 소유 작업 SAP를, 사이베이스 근무하고 위의 답변, 힌트 및 팁 정통 정확합니다.

  4. ==============================

    4.하자 당신이 당신의 응용 프로그램에 데이터를 가져 말한다. 당신은 당신이 얻을 때까지이 레코드가 변경되었는지 확인하려면 뭔가 일 후 (낮은 수준을!)?

    하자 당신이 당신의 응용 프로그램에 데이터를 가져 말한다. 당신은 당신이 얻을 때까지이 레코드가 변경되었는지 확인하려면 뭔가 일 후 (낮은 수준을!)?

    이 경우 타임 스탬프 열이 있어야합니다. 먼저 해당 열을 저장해야합니다. 그냥 데이터를 업데이트하기 전에 확인하기 위해 각 값을 비교해야한다.

    이 데이터 형식이 존재하는 이유입니다!

  5. ==============================

    5.사이베이스 ASE에서, 타임 스탬프가 동일한 서버에서 다른 데이터베이스에 대해 서로 다른 값이 있습니다.

    사이베이스 ASE에서, 타임 스탬프가 동일한 서버에서 다른 데이터베이스에 대해 서로 다른 값이 있습니다.

    사용 데이터베이스 _

    가다

    @@ DBTS를 선택

    따라서 그것이 유닉스 신기원 또는 기타 시간 관련 기준 관련이 없습니다 명백하다.

    이 사이베이스 SQL의 어디서나 타임 스탬프는 다르다.

  6. from https://stackoverflow.com/questions/3500703/what-is-the-mysterious-timestamp-datatype-in-sybase by cc-by-sa and MIT license