Menukar Cap Masa UNIX kepada Tarikh dalam Pelayan SQL
Ramai pengguna SQL Server perlu menukar cap waktu UNIX (disimpan sebagai bigint) kepada nilai DateTime. Ini penting apabila bekerja dengan data daripada sistem yang menggunakan cap masa UNIX untuk mewakili tarikh dan masa.
Penyelesaian Mudah:
Pendekatan biasa melibatkan penggunaan fungsi DATEADD
:
<code class="language-sql">SELECT DATEADD(second, [unixtime], '19700101') FROM [Table]</code>
Di sini, '19700101' mewakili zaman—1 Januari 1970, 00:00:00 UTC, titik permulaan untuk cap masa UNIX.
Masalah Tahun 2038 dan Penyelesaiannya:
Masa zaman mengira saat sejak zaman itu. Fungsi DATEADD
SQL Server, bagaimanapun, mempunyai had integer untuk bilangan saat. Menambah lebih daripada 2,147,483,647 saat menghasilkan ralat limpahan aritmetik. Ini ialah "Masalah Tahun 2038."
Untuk mengendalikan cap masa melebihi 2038, penyelesaiannya ialah membahagikan penambahan kepada dua operasi 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>
Kaedah ini mula-mula mengira bilangan tahun dan baki saat, kemudian menambahkannya secara berurutan, dengan berkesan mengatasi had integer dan membenarkan penukaran cap masa jauh melebihi tahun 2038.
Atas ialah kandungan terperinci Bagaimana untuk Menukar Cap Waktu UNIX kepada DateTime dalam SQL Server dan Mengendalikan Masalah Tahun 2038?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!