DATEADD 및 Bigint를 사용하여 산술 오버플로 오류 처리
SQL Server의 DATEADD 함수는 날짜와 시간을 조작하는 강력한 도구입니다. 그러나 큰 정수로 작업할 때 산술 오버플로 오류가 발생할 수 있습니다.
문제:
사용자가 다음 쿼리를 사용하여 JavaScript 날짜를 SQL 날짜로 변환하려고 시도했습니다. :
DATEADD(MILLISECOND, cast(569337307200000 as bigint) % 1000, DATEADD(SECOND, cast(569337307200000 as bigint) / 1000, '19700101'))
그러나 결과적으로 예외:
Arithmetic overflow error converting expression to data type int
해결책:
오버플로 오류를 방지하려면 초와 같은 더 거친 시간 단위를 사용하여 DATEADD 작업을 더 작은 단계로 나누는 것이 좋습니다. 또는 분을 시작점으로 합니다. 이를 통해 시스템은 달력 계산을 보다 효율적으로 처리할 수 있습니다.
예를 들어 다음 쿼리는 밀리초 단위로 시작 시간을 계산합니다.
-- Avoid using weeks or months due to calendar irregularities DATEADD(ms, -large_duration_ms%60000, DATEADD(minute, -large_duration_ms/60000, GETDATE()))
이 접근 방식을 사용하면 산술 연산이 정수 데이터 형식의 한계 내에서 수행되어 오버플로 오류를 방지합니다.
위 내용은 SQL Server에서 Bigint와 함께 DATEADD를 사용할 때 산술 오버플로 오류를 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!