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

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

Linda Hamilton
풀어 주다: 2025-01-05 10:47:40
원래의
360명이 탐색했습니다.

How to Avoid Arithmetic Overflow Errors When Using DATEADD with Large Bigints?

Bigint를 사용하여 DATEADD의 산술 오버플로 극복

큰 bigint 값과 함께 DATEADD를 사용할 때 산술 오버플로 오류가 발생하면 실망스러울 수 있습니다. 이 문제를 해결하기 위한 적절한 해결 방법은 초 또는 분과 같은 더 거친 시간 단위로 시작하여 여러 단계로 DATEADD 작업을 수행하는 것입니다.

발생한 오류에서 강조한 것처럼 너무 큰 bigint 값을 직접 추가하는 것입니다. 날짜 표현식은 산술 오버플로 오류를 유발할 수 있습니다. 이를 극복하기 위해 작업을 더 작은 단계로 나눌 수 있습니다.

  1. 더 큰 시간 단위를 먼저 뺍니다. 모듈로 계산을 사용하여 bigint 값에 포함된 초 또는 분 수를 결정합니다. . 날짜 표현식에서 이 값을 뺍니다.
  2. 더 세밀한 시간 단위 추가: DATEADD를 사용하여 1단계에서 얻은 결과에 남은 밀리초를 더합니다.

예를 들어 전류 지속 시간이 큰 경우 시작 시간을 계산하려면 (밀리초):

DECLARE @large_duration_ms BIGINT = 569337307200000;

-- Step 1: Subtract minutes (60000ms)
-- (a) Determine number of minutes
DECLARE @minutes_to_subtract BIGINT = @large_duration_ms / 60000;

-- (b) Subtract minutes
DECLARE @start_time_minutes DATETIME = DATEADD(MINUTE, -@minutes_to_subtract, GETDATE());

-- Step 2: Add remaining milliseconds
DECLARE @milli_seconds_to_add BIGINT = @large_duration_ms % 60000;
DECLARE @start_time_final DATETIME = DATEADD(MILLISECOND, @milli_seconds_to_add, @start_time_minutes);

SELECT @start_time_final;
로그인 후 복사

이 다단계 접근 방식을 사용하면 잠재적인 오버플로 오류를 방지하고 큰 bigint 값에서 날짜를 정확하게 계산할 수 있습니다.

위 내용은 큰 Bigint와 함께 DATEADD를 사용할 때 산술 오버플로 오류를 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿