time (Transact-SQL)
Berlaku untuk: Titik akhir analitik SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Platform System (PDW) SQL di Microsoft Fabric Warehouse di Microsoft Fabric
Mendefinisikan waktu dalam sehari. Waktunya tanpa kesadaran zona waktu dan didasarkan pada jam 24 jam.
Catatan
Informasi informatica disediakan untuk pelanggan PDW menggunakan Konektor Informatica.
Deskripsi waktu
Properti | Nilai |
---|---|
Sintaks | time [ (skala kedua pecahan) ] |
Penggunaan | DEKLARASIKAN waktu @MyTime (7) CREATE TABLE Table1 ( Column1 time(7) ) |
skala detik pecahan | Menentukan jumlah digit untuk bagian pecahan detik. Ini bisa menjadi bilangan bulat dari 0 hingga 7. Untuk Informatica, ini bisa menjadi bilangan bulat dari 0 hingga 3. Skala pecahan default adalah 7 (100n). Di Microsoft Fabric, ini bisa menjadi bilangan bulat dari 0 hingga 6, tanpa default. Presisi harus ditentukan dalam Microsoft Fabric. |
Format literal string default (digunakan untuk klien tingkat bawah) |
hh:mm:ss[.nnnnnnn] untuk Informatica) Untuk informasi selengkapnya, lihat bagian Kompatibilitas Mundur untuk Klien Tingkat Bawah. |
Rentang | 00:00:00.0000000 hingga 23:59:59.9999999 (00:00:00.000 hingga 23:59:59.999 untuk Informatica) |
Rentang elemen | hh adalah dua digit, mulai dari 0 hingga 23, yang mewakili jam. mm adalah dua digit, mulai dari 0 hingga 59, yang mewakili menit. ss adalah dua digit, mulai dari 0 hingga 59, yang mewakili yang kedua. n* adalah nol hingga tujuh digit, mulai dari 0 hingga 9999999, yang mewakili detik pecahan. Untuk Informatica, n* adalah nol hingga tiga digit, mulai dari 0 hingga 999. |
Panjang karakter | 8 posisi minimum (hh:mm:ss) hingga maksimum 16 (hh:mm:ss.nnnnnnn). Untuk Informatica, maksimum adalah 12 (hh:mm:ss.nnn). |
Presisi, skala (pengguna hanya menentukan skala) |
Lihat tabel di bawah. |
Ukuran penyimpanan | 5 byte, tetap, adalah default dengan default presisi kedua pecahan 100ns. Di Informatica, defaultnya adalah 4 byte, tetap, dengan default presisi kedua pecahan 1ms. |
Akurasi | 100 nanodetik (1 milidetik di Informatica) |
Nilai default | 00:00:00 Nilai ini digunakan untuk bagian waktu yang ditambahkan untuk konversi implisit dari tanggal ke datetime2 atau datetimeoffset. |
Presisi kedua pecahan yang ditentukan pengguna | Ya |
Sadar dan pelestarian offset zona waktu | No |
Kesadaran musim panas | No |
Skala yang ditentukan | Hasil (presisi, skala) | Panjang kolom (byte) | Pecahan seconds presisi |
---|---|---|---|
time | (16,7) [(12,3) di Informatica] | 5 (4 di Informatica) | 7 (3 di Informatica) |
time(0) | (8,0) | 3 | 0-2 |
time(1) | (10,1) | 3 | 0-2 |
time(2) | (11,2) | 3 | 0-2 |
time(3) | (12,3) | 4 | 3-4 |
time(4)* | (13,4) | 4 | 3-4 |
time(5)* | (14,5) | 5 | 5-7 |
time(6)* | (15,6) | 5 | 5-7 |
time(7)* + | (16,7) | 5 | 5-7 |
* Tidak didukung di Informatica.
+ Tidak didukung di Microsoft Fabric.
Format Literal String yang Didukung untuk waktu
Tabel berikut ini memperlihatkan format literal string yang valid untuk jenis data waktu .
SQL Server | Deskripsi |
---|---|
hh:mm[:ss][:detik pecahan][AM][PM] hh:mm[:ss][.fractional seconds][AM][PM] hhAM[PM] hh AM[PM] |
Nilai jam 0 mewakili jam setelah tengah malam (AM), terlepas dari apakah AM ditentukan. PM tidak dapat ditentukan ketika jam sama dengan 0. Nilai jam dari 01 hingga 11 mewakili jam sebelum siang jika am maupun PM tidak ditentukan. Nilai mewakili jam sebelum siang hari ketika AM ditentukan. Nilai mewakili jam setelah siang hari jika PM ditentukan. Nilai jam 12 menunjukkan jam yang dimulai pada siang hari jika AM maupun PM tidak ditentukan. Jika AM ditentukan, nilai mewakili jam yang dimulai pada tengah malam. Jika PM ditentukan, nilai mewakili jam yang dimulai pada siang hari. Misalnya, 12:01 adalah 1 menit setelah siang, seperti pukul 12:01 PM; dan 12:01 am adalah satu menit setelah tengah malam. Menentukan 12:01 SAMA dengan menentukan 00:01 atau 00:01 AM. Nilai jam dari 13 hingga 23 mewakili jam setelah siang jika AM atau PM tidak ditentukan. Nilai juga mewakili jam setelah siang hari ketika PM ditentukan. AM tidak dapat ditentukan ketika nilai jam adalah dari 13 hingga 23. Nilai jam 24 tidak valid. Untuk mewakili tengah malam, gunakan pukul 12.00 atau 00.00. Milidetik dapat didahului dengan titik dua (:) atau titik (.). Jika titik dua digunakan, angka tersebut berarti seribu detik. Jika periode digunakan, satu digit berarti persepuluh detik, dua digit berarti seratus detik, dan tiga digit berarti seribu detik. Misalnya, 12:30:20:1 menunjukkan 20 dan seribu detik lewat 12:30; 12:30:20.1 menunjukkan 20 dan sesepuluh detik lewat 12:30. |
ISO 8601 | Catatan |
---|---|
hh:mm:ss hh:mm[:ss][.fractional seconds] |
hh adalah dua digit, mulai dari 0 hingga 23, yang mewakili jumlah jam dalam offset zona waktu. mm adalah dua digit, mulai dari 0 hingga 59, yang mewakili jumlah menit tambahan dalam offset zona waktu. |
ODBC | Catatan |
---|---|
{t 'hh:mm:ss[.fractional seconds]'} | ODBC API spesifik. |
Kepatuhan terhadap Standar ANSI dan ISO 8601
Menggunakan jam 24 untuk mewakili tengah malam dan lompatan kedua lebih dari 59 seperti yang didefinisikan oleh ISO 8601 (5.3.2 dan 5.3) tidak didukung untuk kompatibel mundur dan konsisten dengan jenis tanggal dan waktu yang ada.
Format literal string default (digunakan untuk klien tingkat bawah) akan selaras dengan bentuk standar SQL, yang didefinisikan sebagai hh:mm:ss[.nnnnnnn]. Format ini menyerupan definisi ISO 8601 untuk TIME tidak termasuk detik fraksional.
Kompatibilitas Mundur untuk Klien Tingkat Bawah
Beberapa klien tingkat bawah tidak mendukung jenis data waktu, tanggal, tanggalwaktu2, dan datetimeoffset. Tabel berikut menunjukkan pemetaan jenis antara instans tingkat atas SQL Server dan klien tingkat bawah.
Tipe data SQL Server | Format literal string default diteruskan ke klien tingkat bawah | ODBC tingkat bawah | OLEDB tingkat bawah | JDBC tingkat bawah | SQLCLIENT tingkat bawah |
---|---|---|---|---|---|
time | hh:mm:ss[.nnnnnnn] | SQL_WVARCHAR atau SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | String atau SqString |
date | YYYY-MM-DD | SQL_WVARCHAR atau SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | String atau SqString |
datetime2 | YYYY-MM-DD hh:mm:ss[.nnnnnnn] | SQL_WVARCHAR atau SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | String atau SqString |
datetimeoffset | YYYY-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mm | SQL_WVARCHAR atau SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | String atau SqString |
Mengonversi Data Tanggal dan Waktu
Saat Anda mengonversi ke jenis data tanggal dan waktu, SQL Server menolak semua nilai yang tidak dapat dikenali sebagai tanggal atau waktu. Untuk informasi tentang menggunakan fungsi CAST dan CONVERT dengan data tanggal dan waktu, lihat CAST dan CONVERT (Transact-SQL)
Mengonversi Jenis Data waktu(n) ke Jenis Tanggal dan Waktu Lainnya
Bagian ini menjelaskan apa yang terjadi ketika jenis data waktu dikonversi ke jenis data tanggal dan waktu lainnya.
Ketika konversi adalah ke waktu(n), jam, menit, dan detik disalin. Ketika presisi tujuan kurang dari presisi sumber, detik pecahan dibulatkan ke atas agar sesuai dengan presisi tujuan. Contoh berikut menunjukkan hasil konversi nilai menjadi time(4)
time(3)
nilai.
DECLARE @timeFrom TIME(4) = '12:34:54.1237';
DECLARE @timeTo TIME(3) = @timeFrom;
SELECT @timeTo AS 'time(3)', @timeFrom AS 'time(4)';
Berikut set hasilnya.
time(3) time(4)
------------ -------------
12:34:54.124 12:34:54.1237
Jika konversi hingga saat ini, konversi gagal, dan pesan kesalahan 206 dinaikkan: "Jenis operand bentrok: tanggal tidak kompatibel dengan waktu".
Saat konversi adalah nilai tanggalwaktu, jam, menit, dan detik disalin; dan komponen tanggal diatur ke '1900-01-01'. Ketika presisi detik pecahan dari nilai waktu(n) lebih besar dari tiga digit, hasil tanggalwaktu akan dipotong. Kode berikut menunjukkan hasil konversi nilai menjadi time(4)
datetime
nilai.
DECLARE @time TIME(4) = '12:15:04.1237';
DECLARE @datetime DATETIME = @time;
SELECT @time AS '@time', @datetime AS '@datetime';
Berikut set hasilnya.
@time @datetime
------------- -----------------------
12:15:04.1237 1900-01-01 12:15:04.123
Saat konversi adalah smalldatetime, tanggal diatur ke '1900-01-01', dan nilai jam dan menit dibulatkan ke atas. Detik dan detik pecahan diatur ke 0. Kode berikut menunjukkan hasil konversi nilai menjadi time(4)
smalldatetime
nilai.
Perlihatkan pembulatan nilai menit:
DECLARE @time TIME(4) = '12:15:59.9999';
DECLARE @smalldatetime SMALLDATETIME = @time;
SELECT @time AS '@time', @smalldatetime AS '@smalldatetime';
Berikut set hasilnya.
@time @smalldatetime
---------------- -----------------------
12:15:59.9999 1900-01-01 12:16:00--
Perlihatkan pembulatan ke atas dari nilai jam:
DECLARE @time TIME(4) = '12:59:59.9999';
DECLARE @smalldatetime SMALLDATETIME = @time;
SELECT @time AS '@time', @smalldatetime AS '@smalldatetime';
Berikut set hasilnya.
@time @smalldatetime
---------------- -----------------------
12:59:59.9999 1900-01-01 13:00:00
Jika konversi ke datetimeoffset(n), tanggal diatur ke '1900-01-01', dan waktu disalin. Offset zona waktu diatur ke +00:00. Ketika presisi detik pecahan dari nilai waktu(n) lebih besar dari presisi nilai datetimeoffset(n), nilai dibulatkan ke atas agar pas. Contoh berikut menunjukkan hasil konversi nilai menjadi time(4)
datetimeoffset(3)
jenis.
DECLARE @time TIME(4) = '12:15:04.1237';
DECLARE @datetimeoffset DATETIMEOFFSET(3) = @time;
SELECT @time AS '@time', @datetimeoffset AS '@datetimeoffset';
Berikut set hasilnya.
@time @datetimeoffset
------------- ------------------------------
12:15:04.1237 1900-01-01 12:15:04.124 +00:00
Saat mengonversi ke datetime2(n), tanggal diatur ke '1900-01-01', komponen waktu disalin, dan offset zona waktu diatur ke 00:00. Ketika presisi detik pecahan dari nilai datetime2(n) lebih besar dari nilai time(n), nilai akan dibulatkan ke atas agar pas. Contoh berikut menunjukkan hasil konversi nilai menjadi time(4)
datetime2(2)
nilai.
DECLARE @time TIME(4) = '12:15:04.1237';
DECLARE @datetime2 DATETIME2(3) = @time;
SELECT @datetime2 AS '@datetime2', @time AS '@time';
Berikut set hasilnya.
@datetime2 @time
----------------------- -------------
1900-01-01 12:15:04.124 12:15:04.1237
Mengonversi Literal String ke waktu(n)
Konversi dari literal string ke jenis tanggal dan waktu diizinkan jika semua bagian string dalam format yang valid. Jika tidak, kesalahan runtime muncul. Konversi implisit atau konversi eksplisit yang tidak menentukan gaya, dari jenis tanggal dan waktu hingga literal string akan berada dalam format default sesi saat ini. Tabel berikut ini memperlihatkan aturan untuk mengonversi string harfiah ke jenis data waktu .
String input literal | Aturan Konversi |
---|---|
TANGGAL ODBC | Literal string ODBC dipetakan ke jenis data tanggalwaktu . Setiap operasi penugasan dari LITERAL ODBC DATETIME ke dalam jenis waktuakan menyebabkan konversi implisit antara tanggalwaktu dan jenis ini seperti yang didefinisikan oleh aturan konversi. |
WAKTU ODBC | Lihat aturan TANGGAL ODBC di atas. |
TANGGALWAKTU ODBC | Lihat aturan TANGGAL ODBC di atas. |
HANYA TANGGAL | Nilai default disediakan. |
Hanya WAKTU | Trivial |
TimeZONE saja | Nilai default disediakan. |
TANGGAL + WAKTU | Bagian TIME dari string input digunakan. |
DATE + TIMEZONE | Dilarang. |
TIME + TIMEZONE | Bagian TIME dari string input digunakan. |
TANGGAL + WAKTU + ZONA WAKTU | Bagian WAKTU dari DATETIME lokal akan digunakan. |
Contoh
J. Membandingkan Tipe Data tanggal dan waktu
Contoh berikut membandingkan hasil transmisi string dengan setiap jenis data tanggal dan waktu .
SELECT CAST('2007-05-08 12:35:29. 1234567 +12:15' AS TIME(7)) AS 'time',
CAST('2007-05-08 12:35:29. 1234567 +12:15' AS DATE) AS 'date',
CAST('2007-05-08 12:35:29.123' AS SMALLDATETIME) AS 'smalldatetime',
CAST('2007-05-08 12:35:29.123' AS DATETIME) AS 'datetime',
CAST('2007-05-08 12:35:29. 1234567 +12:15' AS DATETIME2(7)) AS 'datetime2',
CAST('2007-05-08 12:35:29.1234567 +12:15' AS DATETIMEOFFSET(7)) AS 'datetimeoffset';
Jenis Data | Output |
---|---|
time | 12:35:29. 1234567 |
date | 2007-05-08 |
smalldatetime | 2007-05-08 12:35:00 |
datetime | 2007-05-08 12:35:29.123 |
datetime2 | 2007-05-08 12:35:29. 1234567 |
datetimeoffset | 2007-05-08 12:35:29.1234567 +12:15 |
B. Menyisipkan Literal String Waktu yang Valid ke dalam Kolom waktu(7)
Tabel berikut mencantumkan literal string berbeda yang dapat disisipkan ke dalam kolom waktu jenis data(7) dengan nilai yang kemudian disimpan di kolom tersebut.
Jenis format literal string | String literal yang disisipkan | nilai time(7) yang disimpan | Deskripsi |
---|---|---|---|
SQL Server | '01:01:01:123SAM' | 01:01:01.1230000 | Ketika titik dua (:) datang sebelum presisi detik pecahan, skala tidak boleh melebihi tiga posisi atau kesalahan akan muncul. |
SQL Server | '01:01:01.1234567 AM' | 01:01:01.1234567 | Ketika AM atau PM ditentukan, waktu disimpan dalam format 24 jam tanpa AM atau PM harfiah |
SQL Server | '01:01:01.1234567 PM' | 13:01:01.1234567 | Ketika AM atau PM ditentukan, waktu disimpan dalam format 24 jam tanpa AM atau PM harfiah |
SQL Server | '01:01:01.1234567PM' | 13:01:01.1234567 | Spasi sebelum AM atau PM bersifat opsional. |
SQL Server | '01AM' | 01:00:00.0000000 | Ketika hanya jam yang ditentukan, semua nilai lainnya adalah 0. |
SQL Server | '01 AM' | 01:00:00.0000000 | Spasi sebelum AM atau PM bersifat opsional. |
SQL Server | '01:01:01' | 01:01:01.0000000 | Ketika presisi detik pecahan tidak ditentukan, setiap posisi yang ditentukan oleh jenis data adalah 0. |
ISO 8601 | '01:01:01.1234567' | 01:01:01.1234567 | Untuk mematuhi ISO 8601, gunakan format 24 jam, bukan AM atau PM. |
ISO 8601 | '01:01:01.1234567 +01:01' | 01:01:01.1234567 | Perbedaan zona waktu opsional (TZD) diizinkan dalam input tetapi tidak disimpan. |
C. Menyisipkan String Waktu Literal ke Dalam Kolom Dari Setiap Tanggal dan Waktu Jenis Tanggal
Dalam tabel berikut, kolom pertama memperlihatkan string waktu harfiah untuk disisipkan ke dalam kolom tabel database dari tipe data tanggal atau waktu yang diperlihatkan di kolom kedua. Kolom ketiga memperlihatkan nilai yang akan disimpan di kolom tabel database.
String literal yang disisipkan | Jenis data kolom | Nilai yang disimpan dalam kolom | Deskripsi |
---|---|---|---|
'12:12:12.1234567' | time(7) | 12:12:12.1234567 | Jika presisi detik pecahan melebihi nilai yang ditentukan untuk kolom, string akan dipotong tanpa kesalahan. |
'2007-05-07' | date | NULL | Setiap kali nilai akan menyebabkan pernyataan INSERT gagal. |
'12:12:12' | smalldatetime | 1900-01-01 12:12:00 | Nilai presisi detik pecahan apa pun akan menyebabkan pernyataan INSERT gagal. |
'12:12:12.123' | datetime | 1900-01-01 12:12:12.123 | Presisi kedua apa pun yang lebih panjang dari tiga posisi akan menyebabkan pernyataan INSERT gagal. |
'12:12:12.1234567' | datetime2(7) | 1900-01-01 12:12:12.1234567 | Jika presisi detik pecahan melebihi nilai yang ditentukan untuk kolom, string akan dipotong tanpa kesalahan. |
'12:12:12.1234567' | datetimeoffset(7) | 1900-01-01 12:12:12.1234567 +00:00 | Jika presisi detik pecahan melebihi nilai yang ditentukan untuk kolom, string akan dipotong tanpa kesalahan. |