>데이터 베이스 >MySQL 튜토리얼 >2038년 문제를 처리하면서 SQL Server에서 UNIX 타임스탬프를 DateTime으로 변환하는 방법은 무엇입니까?

2038년 문제를 처리하면서 SQL Server에서 UNIX 타임스탬프를 DateTime으로 변환하는 방법은 무엇입니까?

DDD
DDD원래의
2025-01-17 16:21:09378검색

How to Convert UNIX Timestamps to DateTime in SQL Server, Handling the Year 2038 Problem?

SQL Server: UNIX 타임스탬프를 DateTime으로 변환

이 가이드에서는 SQL Server 내에서 UNIX 타임스탬프(bigint로 저장됨)를 DateTime 데이터 유형으로 효율적으로 변환하는 방법, 특히 잠재적인 "2038년 문제"를 해결하는 방법을 설명합니다.

표준변환

DATEADD 함수를 사용하는 간단한 방법은 다음과 같습니다.

<code class="language-sql">SELECT DATEADD(SECOND, [unixtime], '19700101')
FROM [Table];</code>

이는 Unix 시대('1970-01-01 00:00:00 UTC')를 타임스탬프 계산의 시작점으로 활용합니다.

2038년 문제 해결

DATEADD 함수의 second 매개변수는 int으로, 용량을 제한합니다. int 제한(2038년 문제)을 초과하는 타임스탬프를 처리하려면 보다 강력한 접근 방식이 필요합니다.

해결책: 큰 타임스탬프를 위한 모듈식 산술

해법은 모듈식 산술을 사용하여 덧셈을 연도와 남은 초로 나누는 것입니다.

<code class="language-sql">DECLARE @t BIGINT = 4147483645;
DECLARE @oneyear INT = 31622400; -- Approximate seconds in a year

SELECT (@t / @oneyear) AS YearsToAdd;  -- Number of years
SELECT (@t % @oneyear) AS RemainingSeconds; -- Remaining seconds

-- Calculate the DateTime
SELECT DATEADD(SECOND, @t % @oneyear, DATEADD(YEAR, @t / @oneyear, '19700101'));</code>

이 방법은 먼저 연도를 추가한 다음 나머지 초를 추가하여 2038년보다 훨씬 이전의 타임스탬프를 올바르게 처리합니다. 이렇게 하면 정수 오버플로 오류를 방지할 수 있습니다.

위 내용은 2038년 문제를 처리하면서 SQL Server에서 UNIX 타임스탬프를 DateTime으로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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