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