Aracılığıyla paylaş


datetime (Transact-SQL)

Şunlar için geçerlidir: Sql ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnalytics Platform Sistemi (PDW)SQL veritabanıMicrosoft Fabric

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, saatkullanın tarih, datetime2ve datetimeoffset veri türlerini . Bu türler SQL Standard ile uyumludur ve daha taşınabilirdir. saat, datetime2 ve datetimeoffset daha fazla saniye duyarlığı sağlar. datetimeoffset, genel olarak dağıtılan uygulamalar için saat dilimi desteği sağlar.

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 12arası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 23arasında değişen iki basamaktır.

mm, dakikayı temsil eden 00 ile 59arasında değişen iki basamaktır.

ss, ikinciyi temsil eden 00 ile 59arasında değişen iki basamaktır.

n*, kesirli saniyeleri temsil eden 0 ile 999arası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, .003veya .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_englishdeğ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_englisholarak 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, Aprilveya geçerli dilde belirtilen Apray 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çin N''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 kesme2050 (varsayılan) ise, 252025 olarak yorumlanır ve 501950olarak 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, .003veya .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.000olarak 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ürmezamandan (n) olduğunda, saat bileşeni kopyalanır ve tarih bileşeni olarak ayarlanır. süresinin kesirli duyarlığı (n) değeri üç basamaktan büyükse, değer sığacak şekilde kesilir. Aşağıdaki örnekte, bir TIME(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 0olarak 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