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
'programing' 카테고리의 다른 글
CSV, Excel, PDF 형식의 Angular로 데이터 내보내기제이에스 (0) | 2023.07.06 |
---|---|
'존재하지 않음'과 '존재하지 않음'의 차이점은 무엇입니까? (0) | 2023.07.06 |
VUEX의 상태 변경을 수정하는 방법은 무엇입니까? (0) | 2023.07.06 |
.NET을 사용하여 16진수 색상 코드에서 색상을 가져오려면 어떻게 해야 합니까? (0) | 2023.07.06 |
경로 쿼리 매개 변수 가져오기 (0) | 2023.07.06 |