복붙노트

[SQL] 왜 SQL Server는 밀리 초를 잃고있다?

SQL

왜 SQL Server는 밀리 초를 잃고있다?

나는이 같은 구조의 테이블을 가지고 :

CREATE TABLE [TESTTABLE]
(
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [DateField] [datetime] NULL,
    [StringField] [varchar](50),
    [IntField] [int] NULL,
    [BitField] [bit] NULL
)

나는 다음과 같은 코드를 실행 :

BEGIN 
   INSERT INTO TESTTABLE (IntField, BitField, StringField, DateField) 
   VALUES ('1', 1, 'hello', {ts '2009-04-03 15:41:27.378'});  

   SELECT SCOPE_IDENTITY()  
END

그리고

select * from testtable with (NOLOCK)

내 결과 쇼 :

2009-04-03 15:41:27.*377*

DateField 구성 열의.

모든 아이디어는 이유는 밀리 초를 잃는 것 같다 ??

해결법

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

    1.SQL Server는 두 번째의 약 1 / 300 시간을 저장합니다. 이 항상 0, 3, 7 밀리 초에가. 예를 들면 가장 작은 증가에서 0까지 카운트 :

    SQL Server는 두 번째의 약 1 / 300 시간을 저장합니다. 이 항상 0, 3, 7 밀리 초에가. 예를 들면 가장 작은 증가에서 0까지 카운트 :

    00:00:00.000 00:00:00.003 00:00:00.007 00:00:00.010 00:00:00.013 ...

    당신이 밀리 초 정확도를해야하는 경우 주위에 적절한 방법이 없다. 내가 본 가장 좋은 옵션은 사용자 정의 번호 필드의 값을 저장하고 그것을 때마다이 값을 가져, 또는 알려진 형식의 문자열로 저장을 재건한다. 그런 다음 (선택) 속도의 이익을 위해 기본 날짜 형식의 '대략'날짜를 저장할 수 있지만, 그것은 종종 원하지 않는 것을 개념적 복잡성을 소개합니다.

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

    2.SQL 서버 2008는 훨씬 더 정밀 사용할 수 있습니다. 2008-12-19 09 : 31 다음 DATETIME2 형 정확하게 이런 값을 저장할 38.5670514 (정확도 100 나노초).

    SQL 서버 2008는 훨씬 더 정밀 사용할 수 있습니다. 2008-12-19 09 : 31 다음 DATETIME2 형 정확하게 이런 값을 저장할 38.5670514 (정확도 100 나노초).

    참조 : 시간과 DATETIME2 - 탐색 SQL 서버 2008의 새로운 날짜 / 시간 데이터 형식

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

    3.당신은 아마 반올림 오류가 표시되어 있으므로 SQL Server는 날짜 유형은, 두 번째 (~ 3.33 밀리 초) 해상도의 300 1을 /이있다.

    당신은 아마 반올림 오류가 표시되어 있으므로 SQL Server는 날짜 유형은, 두 번째 (~ 3.33 밀리 초) 해상도의 300 1을 /이있다.

    은 MSDN 날짜 시간 SQL 서버 참조를 참조하십시오

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

    4.SQL Server는 두 번째의 1 / 300 만 정확합니다. 그것은 가까운 1 / 300에 값을 반올림합니다.

    SQL Server는 두 번째의 1 / 300 만 정확합니다. 그것은 가까운 1 / 300에 값을 반올림합니다.

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

    5.DATETIME 무한 정밀도를 가지고 있지 않습니다 - 당신은 아마 정확하게 사용할 수 비트로 표현 될 수있는 값을 사용하고 있습니다.

    DATETIME 무한 정밀도를 가지고 있지 않습니다 - 당신은 아마 정확하게 사용할 수 비트로 표현 될 수있는 값을 사용하고 있습니다.

  6. ==============================

    6.SQL Server는 3 밀리 세컨드의 정밀도에 날짜 값을 저장합니다. (나는 이것에 대해 들었지만, 공식 참조를 찾을 수 없습니다.)

    SQL Server는 3 밀리 세컨드의 정밀도에 날짜 값을 저장합니다. (나는 이것에 대해 들었지만, 공식 참조를 찾을 수 없습니다.)

  7. from https://stackoverflow.com/questions/715432/why-is-sql-server-losing-a-millisecond by cc-by-sa and MIT license