Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
24 saatlik saati temel alan kesirli saniyelerle günün saatiyle birleştirilen tarihi tanımlar.
Yeni çalışma için datetime kullanmaktan kaçının. Bunun yerine,
Açıklama
Mülk | Değer |
---|---|
Sözdizimi | DATETIME |
Kullanım | DECLARE @MyDatetime DATETIME; CREATE TABLE Table1 (Column1 DATETIME); |
Varsayılan dize değişmez değerleri biçimleri (alt düzey istemci için kullanılır) | Uygulanamaz |
Tarih aralığı | 1753-01-01 (1 Ocak 1753) - 9999-12-31 (31 Aralık 9999) |
Zaman aralığı | 00:00:00- 23:59:59.997 |
Saat dilimi uzaklık aralığı | Hiç kimse |
Öğesi aralıkları |
yyyy , bir yılı temsil eden 1753 ile 9999 arasındaki dört basamaktır.MM , belirtilen yıldaki bir ayı temsil eden 01 ile 12 arasında değişen iki basamaktır.dd , belirtilen ayın gününü temsil eden aya bağlı olarak 01 ile 31 arasında değişen iki basamaktır.HH , saati temsil eden 00 ile 23 arasında değişen iki basamaktır.mm , dakikayı temsil eden 00 ile 59 arasında değişen iki basamaktır.ss , ikinciyi temsil eden 00 ile 59 arasında değişen iki basamaktır.n* , kesirli saniyeleri temsil eden 0 ile 999 arasında değişen sıfır ile üç basamaktır. |
Karakter uzunluğu | 19 konum en az 23 en fazla |
Depolama boyutu | 8 bayt |
Doğruluk |
.000 , .003 veya .007 saniyelik artışlara yuvarlandı |
varsayılan değer |
1900-01-01 00:00:00 |
takvim |
Gregoryen (yılların tamamını içerir) |
kullanıcı tanımlı kesirli ikinci duyarlık |
Hayır |
Saat dilimi fark ve koruma | Hayır |
Gün ışığından yararlanmaya duyarlı | Hayır |
Datetime için desteklenen dize değişmez değerleri biçimleri
Aşağıdaki tablolarda, datetimeiçin desteklenen dize değişmez değerleri listelenmektedir. ODBC dışında, tarih saat dize değişmez değerleri tek tırnak içindedir ('
), örneğin, 'string_literaL'
. Ortam us_english
değilse, dize değişmez değerleri N'string_literaL'
Unicode biçiminde olmalıdır.
Sayısal biçim
Tarih verilerini belirtilen bir sayısal ay ile belirtebilirsiniz. Örneğin, 5/20/97
Mayıs 1997'nin yirminci gününü temsil eder. Sayısal tarih biçimi kullandığınızda, ay, gün ve yılı, ayırıcı olarak eğik çizgi (/
), kısa çizgi (-
) veya nokta (.
) kullanan bir dizede belirtin. Bu dize aşağıdaki biçimde görünmelidir:
<number separator number separator number [time] [time]>
Dil us_english
olarak ayarlandığında, tarihin varsayılan sırası mdy
(ay, gün, yıl) olur.
SET DATEFORMAT deyimini kullanarak tarih sırasını değiştirebilirsiniz.
SET DATEFORMAT
ayarı, tarih değerlerinin nasıl yorumleneceğini belirler. Düzen ayarla eşleşmiyorsa, değerler tarih olarak yorumlanmamıştır. Sıra dışı tarihler, aralık dışında veya yanlış değerlerle yanlış yorumlanabilir. Örneğin 12/10/08
, DATEFORMAT
ayarına bağlı olarak altı tarihten biri olarak yorumlanabilir. Dört bölümlü yıl yıl olarak yorumlanır.
Tarih biçimi | Sipariş |
---|---|
[0]4/15/[19]96 |
mdy |
[0]4-15-[19]96 |
mdy |
[0]4.15.[19]96 |
mdy |
[0]4/[19]96/15 |
myd |
15/[0]4/[19]96 |
dmy |
15/[19]96/[0]4 |
dym |
[19]96/15/[0]4 |
ydm |
[19]96/[0]4/15 |
ymd |
Saat biçimi |
---|
14:30 |
14:30[:20:997] |
14:30[:20.9] |
4am |
4 PM |
Alfabetik biçim
Tam ay adı olarak belirtilen bir ay olan tarih verilerini belirtebilirsiniz. Örneğin, April
veya geçerli dilde belirtilen Apr
ay kısaltması. Virgüller isteğe bağlıdır ve büyük harf kullanımı yoksayılır.
Alfabetik tarih biçimlerini kullanmaya yönelik bazı yönergeler şunlardır:
Tarih ve saat verilerini tek tırnak içine alın (
'
). İngilizce dışındaki diller içinN''
kullanın.Köşeli ayraç içine alınmış karakterler isteğe bağlıdır.
Yılın yalnızca son iki basamağını belirtirseniz, iki basamaklı yıl kesme yapılandırma seçeneğinin değerinin son iki basamağını aşan değerler kesme yılıyla aynı yüzyılda yer alır. Bu seçeneğin değerinden büyük veya buna eşit değerler, kesme yılından önce gelen yüzyıldadır. Örneğin, iki basamaklı yıl kesme
2050
(varsayılan) ise,25
2025
olarak yorumlanır ve50
1950
olarak yorumlanır. Belirsizliği önlemek için dört basamaklı yılları kullanın.Gün eksikse, ayın ilk günü sağlanır.
SET DATEFORMAT
oturum ayarı, ayı alfabetik biçimde belirttiğinizde uygulanmaz.
Alfabetik |
---|
Apr[il] [15][,] 1996 |
Apr[il] 15[,] [19]96 |
Apr[il] 1996 [15] |
[15] Apr[il][,] 1996 |
15 Apr[il][,][19]96 |
15 [19]96 apr[il] |
[15] 1996 apr[il] |
1996 APR[IL] [15] |
1996 [15] APR[IL] |
ISO 8601 biçimi
ISO 8601 biçimini kullanmak için, T
, iki nokta üst üste (:
) ve biçimde gösterilen nokta (.
) dahil olmak üzere biçimdeki her öğeyi belirtmeniz gerekir.
Köşeli ayraçlar, ikinci bileşenin kesirinin isteğe bağlı olduğunu gösterir. Zaman bileşeni 24 saatlik biçimde belirtilir.
T
, datetime değerinin saat bölümünün başlangıcını gösterir.
ISO 8601 biçimini kullanmanın avantajı, kesin belirtimlere sahip uluslararası bir standart olmasıdır. Ayrıca, bu biçim SET DATEFORMAT
veya SET LANGUAGE ayarından etkilenmez.
Örnekler:
2004-05-23T14:25:10
2004-05-23T14:25:10.487
ISO 8601 |
---|
yyyy-MM-ddTHH:mm:ss[.mmm] |
yyyyMMdd[ HH:mm:ss[.mmm]] |
Ayrılmamış biçim
Bu biçim ISO 8601 biçimine benzer, ancak tarih ayırıcı içermez.
Unseparated |
---|
yyyyMMdd HH:mm:ss[.mmm] |
ODBC biçimi
ODBC API'si, ODBC'nin zaman damgası verilerini çağırdığı tarih ve saat değerlerini temsil eden kaçış dizilerini tanımlar. Bu ODBC zaman damgası biçimi, SQL Server için Microsoft OLE DB sağlayıcısı tarafından desteklenen OLE DB dil tanımı (DBGUID-SQL) tarafından da desteklenir. ADO, OLE DB ve ODBC tabanlı API'leri kullanan uygulamalar, tarihleri ve saatleri göstermek için bu ODBC zaman damgası biçimini kullanabilir.
ODBC zaman damgası kaçış sıraları şu biçimdedir: { <literal_type> '<constant_value>' }
:
<literal_type>
kaçış dizisinin türünü belirtir. Zaman damgalarının üç<literal_type>
tanımlayıcısı vardır:-
d
= yalnızca tarih -
t
= yalnızca saat -
ts
= zaman damgası (saat + tarih)
-
<constant_value>
kaçış dizisinin değeridir.<constant_value>
her<literal_type>
için şu biçimleri izlemelidir:-
d
:yyyy-MM-dd
-
t
:hh:mm:ss[.fff]
-
ts
:yyyy-MM-dd HH:mm:ss[.fff]
-
ODBC |
---|
{ ts '1998-05-02 01:23:56.123' } |
{ d '1990-10-02' } |
{ t '13:33:41' } |
Tarih saat kesirli ikinci duyarlık yuvarlama
tarih saat değerleri, aşağıdaki örnekte gösterildiği gibi .000
, .003
veya .007
saniyelik artışlara yuvarlanır.
SELECT '01/01/2024 23:59:59.999' AS [User-specified value],
CAST('01/01/2024 23:59:59.999' AS DATETIME) AS [System stored value]
UNION SELECT '01/01/2024 23:59:59.998', CAST('01/01/2024 23:59:59.998' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.997', CAST('01/01/2024 23:59:59.997' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.996', CAST('01/01/2024 23:59:59.996' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.995', CAST('01/01/2024 23:59:59.995' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.994', CAST('01/01/2024 23:59:59.994' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.993', CAST('01/01/2024 23:59:59.993' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.992', CAST('01/01/2024 23:59:59.992' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.991', CAST('01/01/2024 23:59:59.991' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.990', CAST('01/01/2024 23:59:59.990' AS DATETIME);
Sonuç kümesi aşağıdadır.
Kullanıcı tarafından belirtilen değer | Sistem tarafından depolanan değer |
---|---|
01/01/2024 23:59:59.999 |
2024-01-02 00:00:00.000 |
01/01/2024 23:59:59.998 01/01/2024 23:59:59.997 01/01/2024 23:59:59.996 01/01/2024 23:59:59.995 |
2024-01-01 23:59:59.997 |
01/01/2024 23:59:59.994 01/01/2024 23:59:59.993 01/01/2024 23:59:59.992 |
2024-01-01 23:59:59.993 |
01/01/2024 23:59:59.991 01/01/2024 23:59:59.990 |
2024-01-01 23:59:59.990 |
ANSI ve ISO 8601 uyumluluğu
datetime ANSI veya ISO 8601 uyumlu değildir.
Tarih ve saat verilerini dönüştürme
Tarih ve saat veri türlerine dönüştürdüğünüzde, Veritabanı Altyapısı tarih veya saat olarak tanıyamayan tüm değerleri reddeder.
CAST
ve CONVERT
işlevlerini tarih ve saat verileriyle kullanma hakkında bilgi için bkz. CAST ve CONVERT.
Diğer tarih ve saat türlerini tarih saat veri türüne dönüştürme
Bu bölümde, diğer tarih ve saat veri türleri datetime veri türüne dönüştürüldüğünde ne olduğu açıklanır.
Dönüştürme tarihtenolduğunda, yıl, ay ve gün kopyalanır. Zaman bileşeni 00:00:00.000
olarak ayarlanır. Aşağıdaki kod, bir DATE
değerini DATETIME
bir değere dönüştürmenin sonuçlarını gösterir.
DECLARE @date DATE = '12-21-16';
DECLARE @datetime DATETIME = @date;
SELECT @datetime AS '@datetime', @date AS '@date';
Sonuç kümesi aşağıdadır.
@datetime @date
------------------------ -----------
2016-12-21 00:00:00.000 2016-12-21
Önceki örnekte bölgeye özgü bir tarih biçimi (MM-DD-YY
) kullanılır.
DECLARE @date DATE = '12-21-16';
Örneği bölgenizin biçimiyle eşleşecek şekilde güncelleştirmeniz gerekir.
Ayrıca örneği ISO 8601 uyumlu tarih biçimiyle (yyyy-MM-dd
) tamamlayabilirsiniz. Mesela:
DECLARE @date DATE = '2016-12-21';
DECLARE @datetime DATETIME = @date;
SELECT @datetime AS '@datetime', @date AS '@date';
DönüştürmeTIME(4)
değerini DATETIME
bir değere dönüştürmenin sonuçları gösterilmektedir.
DECLARE @time TIME(4) = '12:10:05.1237';
DECLARE @datetime DATETIME = @time;
SELECT @datetime AS '@datetime', @time AS '@time';
Sonuç kümesi aşağıdadır.
@datetime @time
------------------------ --------------
1900-01-01 12:10:05.123 12:10:05.1237
Dönüştürme smalldatetimeolduğunda, saatler ve dakikalar kopyalanır. Saniyeler ve kesirli saniyeler 0
olarak ayarlanır. Aşağıdaki kod, bir SMALLDATETIME
değerini DATETIME
bir değere dönüştürmenin sonuçlarını gösterir.
DECLARE @smalldatetime SMALLDATETIME = '12-01-16 12:32';
DECLARE @datetime DATETIME = @smalldatetime;
SELECT @datetime AS '@datetime', @smalldatetime AS '@smalldatetime';
Sonuç kümesi aşağıdadır.
@datetime @smalldatetime
------------------------ --------------------
2016-12-01 12:32:00.000 2016-12-01 12:32:00
Dönüştürme datetimeoffset(n)olduğunda, tarih ve saat bileşenleri kopyalanır. Saat dilimi kesilir.
datetimeoffset(n) değerinin kesirli duyarlığı üç basamaktan büyükse, değer kesilir. Aşağıdaki örnekte, bir DATETIMEOFFSET(4)
değerini DATETIME
bir değere dönüştürmenin sonuçları gösterilmektedir.
DECLARE @datetimeoffset DATETIMEOFFSET(4) = '1968-10-23 12:45:37.1234 +10:0';
DECLARE @datetime DATETIME = @datetimeoffset;
SELECT @datetime AS '@datetime', @datetimeoffset AS '@datetimeoffset';
Sonuç kümesi aşağıdadır.
@datetime @datetimeoffset
------------------------ -------------------------------
1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237 +10:0
Dönüştürme datetime2(n)olduğunda, tarih ve saat kopyalanır.
datetime2(n) değerinin kesirli duyarlığı üç basamaktan büyükse, değer kesilir. Aşağıdaki örnekte, bir DATETIME2(4)
değerini DATETIME
bir değere dönüştürmenin sonuçları gösterilmektedir.
DECLARE @datetime2 DATETIME2(4) = '1968-10-23 12:45:37.1237';
DECLARE @datetime DATETIME = @datetime2;
SELECT @datetime AS '@datetime', @datetime2 AS '@datetime2';
Sonuç kümesi aşağıdadır.
@datetime @datetime2
------------------------ -------------------------
1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237
Örnekler
Aşağıdaki örnek, bir dizeyi her tarih ve saat veri türüne dönüştürmenin sonuçlarını karşılaştırır.
SELECT CAST('2024-05-08 12:35:29.1234567 +12:15' AS TIME(7)) AS 'time',
CAST('2024-05-08 12:35:29.1234567 +12:15' AS DATE) AS 'date',
CAST('2024-05-08 12:35:29.123' AS SMALLDATETIME) AS 'smalldatetime',
CAST('2024-05-08 12:35:29.123' AS DATETIME) AS 'datetime',
CAST('2024-05-08 12:35:29.1234567 +12:15' AS DATETIME2(7)) AS 'datetime2',
CAST('2024-05-08 12:35:29.1234567 +12:15' AS DATETIMEOFFSET(7)) AS 'datetimeoffset';
Sonuç kümesi aşağıdadır.
Veri tipi | Çıktı |
---|---|
time |
12:35:29.1234567 |
date |
2024-05-08 |
smalldatetime |
2024-05-08 12:35:00 |
datetime |
2024-05-08 12:35:29.123 |
datetime2 |
2024-05-08 12:35:29.1234567 |
datetimeoffset |
2024-05-08 12:35:29.1234567 +12:15 |