UFO ET IT

SQL Server에서 밀리 초가 손실되는 이유는 무엇입니까?

ufoet 2020. 11. 19. 22:22
반응형

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열입니다.

내가 밀리 초를 잃는 것처럼 보이는 이유가 있습니까 ??


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
...

그 밀리 초의 정확도가 필요하다면 그 주위에 즐거운 방법이 없습니다. 내가 본 최고의 옵션은 사용자 지정 숫자 필드에 값을 저장하고 값을 가져올 때마다 다시 작성하거나 알려진 형식의 문자열로 저장하는 것입니다. 그런 다음 (선택적으로) 속도를 위해 기본 날짜 유형에 '대략적인'날짜를 저장할 수 있지만 종종 원하지 않는 개념적 복잡성을 도입합니다.


SQL Server 2008은 훨씬 더 많은 정밀도를 제공합니다. datetime2 유형은 2008-12-19 09 : 31 : 38.5670514 (100 나노초까지의 정확도)와 같은 값을 정확하게 저장합니다.

참조 : 시간 및 datetime2-SQL Server 2008의 새로운 날짜 / 시간 데이터 형식 탐색


SQL Server datetime유형의 해상도는 1/300 초 (~ 3.33̅ms)이므로 반올림 오류가 표시 될 수 있습니다.

참고 항목 MSDN 날짜 시간 SQL 서버 참조


SQL Server는 1/300 초까지만 정확합니다. 가장 가까운 1/300으로 값을 반올림합니다.


DATETIME에는 무한 정밀도가 없습니다. 사용 가능한 비트로 정확하게 표현할 수없는 값을 사용하고있을 수 있습니다.


SQL Server는 datetime 값을 3 밀리 초의 정밀도로 저장합니다. (이에 대해 들었지만 공식 참조를 찾을 수 없습니다.)

참고 URL : https://stackoverflow.com/questions/715432/why-is-sql-server-losing-a-millisecond

반응형