Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Ubah Time Zone Offset pada nilai datetimeoffset di SQL Server (T-SQL)

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server, XLOCK &optimasi yang menyesatkan

  2. Gunakan PARSENAME() untuk Mengembalikan Bagian dari Nama Objek di SQL Server

  3. 2 Cara Membuat Tabel di Server Tertaut menggunakan T-SQL

  4. Cara Menghentikan/Memulai Antrian Surat Database di SQL Server (T-SQL)

  5. Tidak dapat memuat DLL 'SqlServerSpatial.dll'