Bagikan melalui


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.

Lihat Juga

CAST dan CONVERT (Transact-SQL)