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

Contoh Konversi 'tanggal' ke 'datetimeoffset' di SQL Server (T-SQL)

Artikel ini berisi contoh mengonversi tanggal nilai ke datetimeoffset nilai di SQL Server.

Saat Anda mengonversi tanggal nilai ke datetimeoffset , informasi tambahan ditambahkan ke nilai. Ini karena datetimeoffset tipe data berisi informasi tanggal dan waktu, serta informasi offset waktu. Dengan kata lain, datetimeoffset tipe data mendefinisikan tanggal yang digabungkan dengan waktu dalam sehari yang memiliki kesadaran zona waktu dan didasarkan pada jam 24 jam. Tanggal tipe data, di sisi lain, hanya berisi informasi tanggal.

Saat kami mengonversi dari tanggal ke datetimeoffset , waktu (dan offset zona waktu) secara otomatis ditambahkan ke nilai. Namun, Anda selalu dapat mengubah nilainya jika diperlukan (termasuk offset zona waktu).

offset datetime tipe data juga memungkinkan Anda untuk menentukan presisi pecahan detik. Jika Anda tidak menentukan ini, ini menggunakan skala 7. Ini berarti akan menyertakan 7 digit di sisi kanan titik desimal.

Contoh 1 – Konversi Implisit

Berikut adalah contoh konversi implisit antara tanggal dan datetimeoffset .

DECLARE @thedate date, @thedatetimeoffset datetimeoffset(7)
SET @thedate = '2020-12-01'
SET @thedatetimeoffset = @thedate
SELECT 
  @thedate AS 'date',
  @thedatetimeoffset AS 'datetimeoffset';

Hasil:

+------------+------------------------------------+
| date       | datetimeoffset                     |
|------------+------------------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.0000000 +00:00 |
+------------+------------------------------------+

Ini adalah konversi implisit karena kami tidak menggunakan fungsi konversi (seperti yang di bawah ini) untuk mengonversinya secara eksplisit. Dalam hal ini, SQL Server melakukan konversi implisit di balik layar saat kami mencoba menetapkan tanggal nilai ke datetimeoffset variabel.

Kita dapat melihat bahwa tanggal variabel hanya berisi informasi tanggal, sedangkan datetimeoffset variabel berisi informasi offset tanggal, waktu, dan zona waktu.

Saat Anda mengonversi antara tanggal dan datetimeoffset(7) (yaitu menggunakan skala 7), komponen waktu diatur ke 00:00:00.0000000 +00:00 . Ini juga merupakan nilai default, sehingga Anda dapat menghilangkan nilai presisi dan akan menggunakan skala 7 (yang menghasilkan presisi 34). Anda dapat mengurangi presisi jika Anda mau. Mengurangi presisi juga dapat mengurangi jumlah ruang yang diperlukan untuk menyimpan nilai.

Untuk memperjelas, skala adalah jumlah digit di sebelah kanan titik desimal dalam suatu bilangan. Presisi adalah jumlah total digit dalam nomor tersebut.

Contoh 2 – Konversi Eksplisit menggunakan CAST()

Berikut ini contoh konversi eksplisit. Dalam hal ini, saya menggunakan CAST() berfungsi langsung di dalam SELECT pernyataan untuk secara eksplisit mengonversi antara tanggal dan datetimeoffset .

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  CAST(@thedate AS datetimeoffset) AS 'datetimeoffset';

Hasil:

+------------+------------------------------------+
| date       | datetimeoffset                     |
|------------+------------------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.0000000 +00:00 |
+------------+------------------------------------+

Jadi kita mendapatkan hasil yang sama dengan konversi implisit.

Kita juga bisa mengatur waktu seperti ini:

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  DATEADD(hour, 7, CAST(@thedate AS datetimeoffset)) AS 'datetimeoffset';

Hasil:

+------------+------------------------------------+
| date       | datetimeoffset                     |
|------------+------------------------------------|
| 2020-12-01 | 2020-12-01 07:00:00.0000000 +00:00 |
+------------+------------------------------------+

Perhatikan bahwa Anda tidak dapat menggunakan DATEADD() berfungsi untuk memodifikasi komponen offset waktu. Tapi jangan khawatir, ada ada cara untuk memodifikasinya (baca terus untuk mengetahui caranya).

Contoh 3 – Konversi Eksplisit menggunakan CONVERT()

Berikut adalah contoh konversi eksplisit menggunakan CONVERT() fungsi alih-alih CAST() .

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  CONVERT(datetimeoffset, @thedate) AS 'datetimeoffset';

Hasil:

+------------+------------------------------------+
| date       | datetimeoffset                     |
|------------+------------------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.0000000 +00:00 |
+------------+------------------------------------+

Dan menyesuaikan waktu:

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  DATEADD(hour, 7, CONVERT(datetimeoffset, @thedate)) AS 'datetimeoffset';

Hasil:

+------------+------------------------------------+
| date       | datetimeoffset                     |
|------------+------------------------------------|
| 2020-12-01 | 2020-12-01 07:00:00.0000000 +00:00 |
+------------+------------------------------------+

Contoh 4 – Memodifikasi Time Offset

Pada contoh sebelumnya kami menggunakan DATEADD() berfungsi untuk mengubah nilai waktu. Fungsi ini dapat digunakan untuk mengubah bagian mana pun dari komponen tanggal atau waktu, kecuali komponen offset waktu .

Jika Anda perlu mengubah offset waktu, Anda dapat menggunakan TODATETIMEOFFSET() fungsi. Anda juga dapat menggunakan fungsi ini untuk mengonversi tanggal asli nilai ke datetimeoffset nilai. Fungsi ini menerima nilai tanggal (yang dapat diselesaikan menjadi datetime2 nilai), dan nilai offset.

Ini contohnya:

DECLARE @thedate date, @thedatetimeoffset datetimeoffset
SET @thedate = '2020-12-01'
SET @thedatetimeoffset = TODATETIMEOFFSET(@thedate, '+07:00')
SELECT 
  @thedate AS 'date',
  @thedatetimeoffset AS 'datetimeoffset';

Hasil:

+------------+------------------------------------+
| date       | datetimeoffset                     |
|------------+------------------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.0000000 +07:00 |
+------------+------------------------------------+

Dan inilah contoh penggunaan fungsi di dalam SELECT pernyataan:

DECLARE @thedate date = '2020-12-01'
SELECT 
  @thedate AS 'date',
  TODATETIMEOFFSET(@thedate, '+07:00') AS 'datetimeoffset';

Hasil:

+------------+------------------------------------+
| date       | datetimeoffset                     |
|------------+------------------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.0000000 +07:00 |
+------------+------------------------------------+

TODATETIMEOFFSET() fungsi juga menerima datetimeoffset value sebagai parameter pertamanya, jadi Anda juga dapat menggunakannya untuk mengubah datetimeoffset nilai jika diperlukan.

Contoh:

DECLARE @thedate date, @thedatetimeoffset datetimeoffset(7)
SET @thedate = '2020-12-01'
SET @thedatetimeoffset = @thedate
SELECT 
  @thedate AS 'date',
  @thedatetimeoffset AS 'datetimeoffset',
  TODATETIMEOFFSET(@thedatetimeoffset, '+07:00') AS 'Modified';

Hasil:

+------------+------------------------------------+------------------------------------+
| date       | datetimeoffset                     | Modified                           |
|------------+------------------------------------+------------------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.0000000 +00:00 | 2020-12-01 00:00:00.0000000 +07:00 |
+------------+------------------------------------+------------------------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tidak dapat mengecilkan basis data 'hanya baca' | Kecilkan Log Transaksi Saat Menggunakan Grup Ketersediaan AlwaysOn

  2. Tidak dapat menggunakan predikat CONTAINS atau FREETEXT pada tabel atau tampilan terindeks karena tidak diindeks teks lengkap

  3. Berapa nomor telepon dunia terpanjang yang harus saya pertimbangkan dalam SQL varchar(panjang) untuk telepon

  4. 3 Metode untuk Membangun Kembali Semua Indeks untuk Semua Tabel dengan T-SQL di Database SQL Server

  5. Bagaimana mengubah tipe data kolom dalam database SQL tanpa kehilangan data