programing

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

lastmoon 2023. 7. 6. 22:29
반응형

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

다음과 같은 구조의 테이블이 있습니다.

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밀리초가 줄어드는 것처럼 보이는지 아세요?

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-1909:31:38.5670514(정확도 100나노초)와 같은 값을 정확하게 저장합니다.

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

SQL Server 유형의 해상도는 300분의 1초(~3.33µms)에 불과하므로 반올림 오류가 있을 수 있습니다.

MSDN Datetime SQL Server 참조 참조

SQL Server는 1/300초까지만 정확합니다.값을 300분의 1로 반올림합니다.

DATTIME에는 무한 정밀도가 없습니다. 사용 가능한 비트로 정확하게 나타낼 수 없는 값을 사용하고 있을 수 있습니다.

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

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

반응형