Anda dapat menggunakan SWITCHOFFSET()
fungsi di SQL Server untuk mengubah offset zona waktu pada datetimeoffset nilai.
Fungsi menerima dua argumen; a datetimeoffset(n) nilai (atau ekspresi yang dapat diselesaikan menjadi datetimeoffset(n) nilai), dan zona waktu baru.
Contoh
Berikut ini contoh untuk didemonstrasikan.
DECLARE @dto datetimeoffset = '2020-12-20 17:33:59.8900000 +02:00';
SELECT
@dto AS [Original],
SWITCHOFFSET(@dto, '+04:00') AS [Modified];
Hasil (menggunakan keluaran vertikal):
Original | 2020-12-20 17:33:59.8900000 +02:00 Modified | 2020-12-20 19:33:59.8900000 +04:00
Perhatikan bahwa offset zona waktu ditentukan sebagai string. Ini karena saya menyediakannya dalam hitungan jam.
Jika ditentukan dalam jam, offset zona waktu harus menggunakan format [+|-]TZH:TZM dan ditetapkan sebagai string (diapit dalam tanda kutip tunggal).
Gunakan Menit sebagai Offset Zona Waktu
Anda juga dapat menentukan offset zona waktu dalam hitungan menit. Saat melakukan ini, Anda harus menentukannya sebagai bilangan bulat.
DECLARE @dto datetimeoffset = '2020-12-20 17:33:59.8900000 +02:00';
SELECT
@dto AS [Original],
SWITCHOFFSET(@dto, 240) AS [Modified];
Hasil (menggunakan keluaran vertikal):
Original | 2020-12-20 17:33:59.8900000 +02:00 Modified | 2020-12-20 19:33:59.8900000 +04:00
Contoh Basis Data
Berikut ini contoh penggunaan SWITCHOFFSET()
pada nilai dari kolom dalam tabel database.
CREATE TABLE Test
(
Col1 datetimeoffset
);
INSERT INTO Test
VALUES ('1967-12-20 17:33:59.8900000 -07:00');
SELECT
Col1,
SWITCHOFFSET(Col1, '-08:00') AS Modified
FROM Test;
Hasil (menggunakan keluaran vertikal):
Col1 | 1967-12-20 17:33:59.8900000 -07:00 Modified | 1967-12-20 16:33:59.8900000 -08:00
Kinerja Saat menggunakan Nilai GETDATE()
Microsoft menyarankan agar menggunakan SWITCHOFFSET()
dengan GETDATE()
fungsi dapat menyebabkan kueri berjalan lambat, karena pengoptimal kueri tidak dapat memperoleh perkiraan kardinalitas yang akurat untuk datetime nilai.
Untuk mengatasi masalah ini, gunakan OPTION (RECOMPILE)
petunjuk kueri. Ini memaksa pengoptimal kueri untuk mengkompilasi ulang rencana kueri saat berikutnya kueri yang sama dijalankan.
Tidak Tahu Time Zone Offset?
Jika Anda tidak mengetahui offset zona waktu yang digunakan, berikut ini cara mendapatkan daftar zona waktu yang didukung di SQL Server.
Satu hal yang perlu Anda perhatikan adalah penghematan siang hari. Banyak negara/wilayah memiliki aturan khusus mereka sendiri untuk mengamati musim panas (dan beberapa tidak mematuhinya sama sekali). Hal ini dapat menyebabkan segala macam masalah saat Anda mencoba mencari tahu apakah akan memasukkan penghematan waktu siang hari ke dalam offset zona waktu Anda atau tidak.
Untungnya, SQL Server menemukan cara untuk mengatasi ini. SQL Server 2016 memperkenalkan AT TIME ZONE
ayat. Klausa ini memungkinkan Anda untuk menentukan nama zona waktu, bukan offset zona waktu itu sendiri. Oleh karena itu, Anda cukup menggunakan 'Waktu Standar Pegunungan AS' atau 'Waktu Standar India' atau zona waktu apa pun yang berlaku.
Lihat Mengonversi Tanggal ke Zona Waktu Lain untuk contoh cara melakukannya.