>데이터 베이스 >MySQL 튜토리얼 >SQL Server에서 Bigint와 함께 DATEADD를 사용할 때 산술 오버플로 오류를 방지하는 방법은 무엇입니까?

SQL Server에서 Bigint와 함께 DATEADD를 사용할 때 산술 오버플로 오류를 방지하는 방법은 무엇입니까?

DDD
DDD원래의
2024-12-29 17:29:11224검색

How to Avoid Arithmetic Overflow Errors When Using DATEADD with Bigints in SQL Server?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.