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
'UFO ET IT' 카테고리의 다른 글
여러 작업을 실행하는 Gradle 사용자 지정 작업 (0) | 2020.11.19 |
---|---|
전역 변수를 사용하지 않고 다른 함수의 변수에 액세스 (0) | 2020.11.19 |
창에서 UIBarButtonItem 프레임을 알아 내십니까? (0) | 2020.11.19 |
React Native에서 텍스트 입력을 올바르게 정렬하는 방법은 무엇입니까? (0) | 2020.11.19 |
laravel 설치 프로그램을 사용하여 특정 버전 설치 (0) | 2020.11.19 |