Artikel ini membahas berbagai perintah SQL (fungsi) untuk mengembalikan tanggal dan waktu saat ini (stempel waktu) di SQL Server.
pengantar
Dalam aplikasi database, tanggal dan waktu saat ini digunakan dalam beberapa cara. Baik Anda membuat laporan audit, catatan penjualan, pemicu basis data, atau hanya karena Anda memerlukan tanggal dan waktu saat ini, mengetahui berbagai cara untuk mengambil tanggal dan waktu saat ini bisa sangat berguna. Artikel ini akan membahas berbagai fungsi tanggal saat ini T-SQL, kapan menggunakannya, dan bagaimana menggunakannya.
Artikel ini meninjau perintah SQL DateTime (fungsi) untuk SQL Server, Azure SQL Database, Managed Instance (MI), dan Azure Synapse Analytics.
- TANGGAL()
- CURRENT_TIMESTAMP
- SYSDATETIME
- GETUTCDATE
- SYSUTCDATETIME
- SYSDATETIMEOFFSET
Mari kita mulai melihat artikel-artikel ini dan memahami perbedaan di antara mereka.
SQL Server GETDATE() fungsi.
GETDATE() Perintah SQL (fungsi) Mengembalikan stempel waktu sistem tanpa menentukan offset zona waktu. Ini mengambil nilai ini sesuai dengan zona waktu komputer (server) yang mendasarinya. Tipe data adalah nilai kembalian waktu perjanjian
Namun, menjalankan fungsi GETDATE() di Azure SQL Database dan Azure Synapse Analytics mengembalikan UTC (Koordinat Waktu Universal).
Anda dapat menambah atau mengurangi tanggal dari fungsi GETDATE(). Misalnya, GETDATE()-1 mengembalikan stempel waktu kemarin sementara GETDATE()+1 mengembalikan stempel waktu besok.
Pilih ajak kencan()–1 seperti kemarin, ajak kencan() seperti Hari ini, ajak kencan()+1 seperti Besok |
Jika kita perlu menafsirkan nilai pengembalian zona waktu non-UTC untuk Azure SQL Database atau SQL Server, gunakan fungsi AT TIME ZONE.
Misalnya, kita ingin mendapatkan nilai Zona Waktu Standar India (IST) dari fungsi getdate(). Skrip berikut mendefinisikan zona waktu saat ini sebagai UTC dan kemudian mengonversinya ke nilai zona waktu yang diinginkan.
Pilih GETDATE() PADA Waktu daerah ‘UTC’ PADA Waktu daerah “Waktu Standar India” |
Untuk daftar zona waktu Azure yang didukung, cari tabel sistem di bawah ini.
Pilih nama seperti zona waktu, Current_UTC_offset dari Sistem.Informasi zona waktu |
CURRENT_TIMESTAMP
CURRENT_TIMESTAMP Pernyataan SQL (fungsi) mengembalikan stempel waktu sistem, mirip dengan fungsi GETDATE(). Ini adalah ANSI yang setara dengan fungsi GETDATE() dan dapat digunakan secara bergantian dalam pernyataan T-SQL.
Seperti yang ditunjukkan di bawah ini, kita dapat mengganti GETDATE() dengan CURRENT_TIMESTAMP dengan fungsi AT TIME ZONE untuk mengambil nilai zona waktu yang diinginkan.
Pilih CURRENT_TIMESTAMP PADA Waktu daerah ‘UTC’ PADA Waktu daerah “Waktu Standar India” |
SYSDATETIME()
Fungsi SYSDATETIME() mengembalikan nilai yang lebih tepat dalam sepersekian detik. Tipe data dari nilai kembalian adalah datetime2 dengan 7 presisi.
GETUTCDATE() dan SYSUTCDATETIME()
Misalkan Anda perlu mendapatkan stempel waktu UTC terlepas dari zona waktu sistem Anda. Dalam hal ini, Anda dapat menggunakan pernyataan SQL (fungsi) GETUTCDATE () seperti yang ditunjukkan di bawah ini.
- Tipe data nilai pengembalian: waktu perjanjian
- Offset zona waktu termasuk: Tidak
SYSUTCDATE() juga mengembalikan nilai zona UTC dengan presisi yang lebih tinggi. Tipe data dari nilai kembaliannya adalah DateTime2 dengan presisi 7.
Pilih SYSUTCDATETIME() |
SYSDATETIMEOFFSET()
SYSDATETIMEOFFSET() Perintah SQL (fungsi) Mengembalikan nilai berdasarkan zona waktu sistem operasi yang mendasarinya. Ini mencakup akurasi yang lebih tinggi bersama dengan offset zona waktu.
Seperti yang ditunjukkan di bawah, ini berisi offset zona waktu +00:00, yang menunjukkan bahwa itu adalah UTC.
Permintaan untuk memeriksa output yang dikembalikan oleh berbagai fungsi DateTime
Kueri berikut menggabungkan semua fungsi DateTime SQL Server ke dalam satu pernyataan SELECT. Anda dapat menjalankan kueri berikut untuk membandingkan nilai yang dikembalikan. Ini mengembalikan nilai dari GETDATE(), CURRENT_TIMESTAMP, SYSDATETIME, SYSDATETIMEOFFSET, GETUTCDATE, SYSUTCDATETIME seperti yang ditunjukkan di bawah ini.
Pilih GETDATE() seperti [GETDATE()] ,CURRENT_TIMESTAMP seperti [CURRENT_TIMESTAMP] ,SYSDATETIME() seperti [SYSDATETIME()] ,SYSDATETIMEOFFSET() seperti [SYSDATETIMEOFFSET()] ,GETUTCDATE() seperti [GETUTCDATE()] ,SYSUTCDATETIME() seperti [SYSUTCDATETIME()] ; |
Dalam database Azure SQL saya, ia mengembalikan nilai berikut.
- GETDATE(): 2021-12-25 02:50:40.767
- CURRENT_TIMESTAMP: 2021-12-25 02:50:40.767
- SYSDATETIME():2021-12-25 02:50:40.7500000
- SYSDATETIMEOFFSET(): 2021-12-25 02:50:40.7500000 +00:00
- GETUTCDATE(): 2021-12-25 02:50:40,753
- WAKTU SISTEM: 2021-12-25 02:50:40,7534774
Dalam banyak kasus, kita tidak membutuhkan nilai waktu atau offset. Dalam hal ini, kita dapat menggunakan fungsi CONVERT() dan semua fungsi akan mengembalikan tanggal seperti yang ditunjukkan di bawah ini.
Pilih konversi (Sejarah,GETDATE()) seperti [GETDATE()] ,konversi (Sejarah,CURRENT_TIMESTAMP) seperti [CURRENT_TIMESTAMP] ,konversi (Sejarah,SYSDATETIME()) seperti [SYSDATETIME()] ,konversi (Sejarah,SYSDATETIMEOFFSET()) seperti [SYSDATETIMEOFFSET()] ,konversi (Sejarah,GETUTCDATE()) seperti [GETUTCDATE()] ,konversi (Sejarah,SYSUTCDATETIME()) seperti [SYSUTCDATETIME()] ; |
Demikian pula, kita dapat menggunakan argumen waktu dalam fungsi CONVERT() untuk mengekstrak bagian stempel waktu dari output, seperti yang ditunjukkan di bawah ini.
Pilih konversi (Waktu,GETDATE()) seperti [GETDATE()] ,konversi (Waktu,CURRENT_TIMESTAMP) seperti [CURRENT_TIMESTAMP] ,konversi (Waktu,SYSDATETIME()) seperti [SYSDATETIME()] ,konversi (Waktu,SYSDATETIMEOFFSET()) seperti [SYSDATETIMEOFFSET()] ,konversi (Waktu,GETUTCDATE()) seperti [GETUTCDATE()] ,konversi (Waktu,SYSUTCDATETIME()) seperti [SYSUTCDATETIME()] ; |
Mari kita jelajahi beberapa kasus penggunaan fungsi DateTime yang berbeda di SQL Server dan Azure SQL Database.
Contoh berikut membuat tabel yang disebut [DemoSQLTable] dengan beberapa kolom dan nilai defaultnya dari fungsi DateTime – GETDATE(), CURRENT_TIMESTAMP dan SYSDATETIME(). Saat kami menyisipkan catatan tanpa nilai eksplisit apa pun, itu mengambil data dari fungsi DateTime ini dan menyimpannya di kolom yang sesuai.
Membuat Meja DemoSQLTable ( PENGENAL internasional, tanggal tanggal saya tanggal kecil Anggapan GETDATE(), sayaCurrentTimeStamp waktu perjanjian Anggapan CURRENT_TIMESTAMP, mySYSDATETIME datetime2 Anggapan SYSDATETIME() ); Pergi memasukkan Ke DemoSQLTable (PENGENAL) nilai-nilai (1); Pergi Pilih * dari DemoSQLTable; |
Bisakah kita menggunakan fungsi DateTime sebagai parameter prosedur tersimpan?
Kita sering membutuhkan data dari tabel database yang memenuhi rentang tanggal atau waktu tertentu. Misalnya, jika kita menyimpan catatan penjualan pelanggan dalam sebuah tabel, kita mungkin tertarik untuk mengetahui pesanan untuk hari ini atau untuk bulan atau tahun tertentu.
Mari buat prosedur tersimpan menggunakan kueri berikut untuk mendemonstrasikan. Mendefinisikan parameter @MyDateTime dengan tipe data DATETIME. Selanjutnya, kami ingin memfilter catatan dari bidang [SalesLT].[SalesOrderDetail] Tabel berdasarkan parameter
Membuat PROC Test_DateTime_Proc @TanggalTanggalSaya waktu perjanjian seperti Pilih [SalesOrderID] ,[SalesOrderDetailID] ,[OrderQty] ,[ProductID] ,[ModifiedDate] dari [SalesLT].[SalesOrderDetail] di mana [ModifiedDate]=@TanggalTanggalSaya |
Kami ingin menggunakan fungsi DateTime untuk memberikan nilai parameter @MyDateTime. Jika kita langsung melewati fungsi DateTime untuk nilai parameter, itu akan mengembalikan kesalahan seperti yang ditunjukkan di bawah ini.
EXEC Test_DateTime_Proc @TanggalTanggalSaya=ajak kencan() |
Untuk menjalankan prosedur tersimpan dengan fungsi DateTime sebagai nilai parameter, kita dapat mendeklarasikan variabel dan menyimpan output dari fungsi tersebut. Misalnya, di T-SQL, kami mendeklarasikan parameter @I dan menetapkan nilainya menggunakan fungsi GETDATE().
untuk mengumumkan @Saya waktu perjanjian = ajak kencan() eksekutif Test_DateTime_Proc @TanggalTanggalSaya = @Saya; Pergi |
Script berfungsi dengan baik tanpa kesalahan. Dalam kasus saya, tidak ada baris yang cocok untuk predikat. Oleh karena itu, ia mengembalikan 0 baris yang terpengaruh.
Catatan: Fungsi DateTime di SQL Server tidak bersifat deterministik. Oleh karena itu, tampilan dan ekspresi yang merujuk ke fungsi ini di kolom yang sama tidak dapat diindeks.
Hasil
Artikel ini membahas beberapa cara untuk menggunakan pernyataan SQL (fungsi) untuk mengambil tanggal dan waktu saat ini. Saya juga membahas kapan harus menggunakan fungsi-fungsi ini dan bagaimana menggunakannya. Kami harap artikel ini memberi Anda beberapa ide untuk menggunakan fungsi-fungsi ini di aplikasi Anda.
Jika Anda memiliki pertanyaan tentang fungsi DateTime yang dibahas, silakan posting di bagian komentar di bawah. Terima kasih telah belajar dan beri tahu kami pendapat Anda di komentar.
