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