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

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

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).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Periksa apakah ada file atau tidak di sql server?

  2. ADO.net SqlTransaction meningkatkan kinerja

  3. 5 Fitur Teratas yang Perlu Disediakan Platform Pemantauan Kinerja Basis Data SQL Server Anda

  4. Kata Kunci Tidak Didukung:Metadata

  5. Tambahkan IIS 7 AppPool Identities sebagai SQL Server Logos