Artikel ini berisi contoh mengonversi tanggal nilai ke waktu kecil nilai di SQL Server.
Saat Anda mengonversi tanggal nilai ke smalldatetime , informasi tambahan ditambahkan ke nilai. Ini karena waktu kecil tipe data berisi informasi tanggal dan waktu. Tanggal tipe data, di sisi lain, hanya berisi informasi tanggal.
Namun, ada kasus di mana tanggal ke waktu kecil konversi mungkin gagal. Khususnya, jika tanggal nilai berada di luar rentang yang didukung oleh smalldatetime maka itu akan gagal dengan kesalahan.
Bagaimanapun, di bawah ini adalah contoh konversi antara dua tipe data ini.
Contoh 1 – Konversi Implisit
Berikut adalah contoh konversi implisit antara tanggal dan waktu kecil .
DECLARE @thedate date, @thesmalldatetime smalldatetime SET @thedate = '2020-12-01' SET @thesmalldatetime = @thedate SELECT @thedate AS 'date', @thesmalldatetime AS 'smalldatetime';
Hasil:
+------------+---------------------+ | date | smalldatetime | |------------+---------------------| | 2020-12-01 | 2020-12-01 00: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 waktu kecil variabel.
Kita dapat melihat bahwa tanggal variabel hanya berisi informasi tanggal, sedangkan waktu kecil variabel berisi informasi tanggal dan waktu.
Saat Anda mengonversi antara tanggal dan waktu kecil , komponen waktu diatur ke 00:00:00
. Ini memberikan akurasi hingga menit.
Alasan semuanya nol adalah karena nilai tanggal tidak berisi informasi waktu apa pun, jadi SQL Server tidak dapat mengetahui jam berapa yang Anda inginkan (jika ada).
Tentu saja, Anda juga mendapatkan hasil ini meskipun Anda hanya menetapkan nilai tanggal saja ke waktu kecil tanpa melakukan konversi:
DECLARE @thesmalldatetime smalldatetime = '2020-12-01' SELECT @thesmalldatetime AS 'smalldatetime';
Hasil:
+---------------------+ | smalldatetime | |---------------------| | 2020-12-01 00:00:00 | +---------------------+
Contoh 2 – Ubah Waktu
Jika Anda perlu menentukan waktu (tetapi tetap pada tanggal yang sama), Anda dapat menggunakan DATEADD()
berfungsi untuk melakukan hal itu.
DECLARE @thedate date, @thesmalldatetime smalldatetime SET @thedate = '2020-12-01' SET @thesmalldatetime = @thedate SET @thesmalldatetime = DATEADD(hour, 7, @thesmalldatetime) SELECT @thedate AS 'date', @thesmalldatetime AS 'smalldatetime';
Hasil:
+------------+---------------------+ | date | smalldatetime | |------------+---------------------| | 2020-12-01 | 2020-12-01 07:00:00 | +------------+---------------------+
Contoh 3 – 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 waktu kecil .
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', CAST(@thedate AS smalldatetime) AS 'smalldatetime';
Hasil:
+------------+---------------------+ | date | smalldatetime | |------------+---------------------| | 2020-12-01 | 2020-12-01 00:00:00 | +------------+---------------------+
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 smalldatetime)) AS 'smalldatetime';
Hasil:
+------------+---------------------+ | date | smalldatetime | |------------+---------------------| | 2020-12-01 | 2020-12-01 07:00:00 | +------------+---------------------+
Contoh 4 – 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(smalldatetime, @thedate) AS 'smalldatetime';
Hasil:
+------------+---------------------+ | date | smalldatetime | |------------+---------------------| | 2020-12-01 | 2020-12-01 00:00:00 | +------------+---------------------+
Dan menyesuaikan waktu:
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', DATEADD(hour, 7, CONVERT(smalldatetime, @thedate)) AS 'smalldatetime';
Hasil:
+------------+---------------------+ | date | smalldatetime | |------------+---------------------| | 2020-12-01 | 2020-12-01 07:00:00 | +------------+---------------------+
Contoh 5 – Kesalahan Di Luar Jangkauan
Seperti yang disebutkan, jika tanggal berada di luar rentang yang didukung oleh smalldatetime tipe data, Anda akan mendapatkan kesalahan.
DECLARE @thedate date SET @thedate = '2080-12-01' SELECT @thedate AS 'date', CAST(@thedate AS smalldatetime) AS 'smalldatetime';
Hasil:
The conversion of a date data type to a smalldatetime data type resulted in an out-of-range value.
waktu kecil tipe data hanya mendukung rentang tanggal 1900-01-01 hingga 2079-06-06.
Juga, waktu kecil tipe data hanya mendukung rentang waktu 00:00:00 hingga 23:59:59, jadi Anda juga akan mendapatkan kesalahan jika mencoba menggunakan nilai di luar rentang tersebut (misalnya, dengan presisi yang lebih tinggi).
Contoh:
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', DATEADD(nanosecond, 7, CAST(@thedate AS smalldatetime)) AS 'smalldatetime';
Hasil:
The datepart nanosecond is not supported by date function dateadd for data type smalldatetime.
Namun, dalam hal ini, ini bukan kesalahan saat mengonversi, itu sebenarnya kesalahan saat menggunakan DATEADD()
function (karena fungsi tersebut tidak mengizinkan bagian tanggal tertentu untuk digunakan pada waktu kecil tipe data).