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

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

Mary-Kate Olsen
풀어 주다: 2025-01-17 16:27:10
원래의
496명이 탐색했습니다.

How to Convert UNIX Timestamps to DateTime in SQL Server and Handle the Year 2038 Problem?

SQL Server에서 UNIX 타임스탬프를 날짜로 변환

많은 SQL Server 사용자는 UNIX 타임스탬프(bigint로 저장됨)를 DateTime 값으로 변환해야 합니다. 이는 UNIX 타임스탬프를 사용하여 날짜와 시간을 나타내는 시스템의 데이터로 작업할 때 필수적입니다.

간단한 솔루션:

일반적인 접근 방식은 DATEADD 함수를 사용하는 것입니다.

<code class="language-sql">SELECT DATEADD(second, [unixtime], '19700101')
FROM [Table]</code>
로그인 후 복사

여기서 '19700101'은 UNIX 타임스탬프의 시작점인 1970년 1월 1일 00:00:00 UTC를 의미합니다.

2038년 문제와 해결책:

에포크 시간은 에포크 이후의 초를 계산합니다. 그러나 SQL Server의 DATEADD 함수에는 초 수에 대한 정수 제한이 있습니다. 2,147,483,647초 이상을 추가하면 산술 오버플로 오류가 발생합니다. 이것이 바로 '2038년 문제'입니다.

2038년 이후의 타임스탬프를 처리하려면 추가 작업을 두 개의 DATEADD 작업으로 나누는 것이 해결 방법입니다.

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

SELECT DATEADD(second, @t % @oneyear, DATEADD(year, @t / @oneyear, '19700101'));</code>
로그인 후 복사

이 방법은 먼저 연도 수와 남은 초를 계산한 다음 이를 순차적으로 추가하여 정수 제한을 효과적으로 극복하고 2038년을 훨씬 넘어서는 타임스탬프 변환을 허용합니다.

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

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