Aracılığıyla paylaş


Tarih (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnaliz Platformu Sistemi (PDW)Microsoft Fabric'teki SQL analiz uç noktasıMicrosoft Fabric'teki ambarMicrosoft Fabric'teki SQL veritabanı

SQL Server'da bir tarih tanımlar. Tarih veri türü SQL Server 2008'de (10.0.x) tanıtıldı.

Tarih açıklaması

Property Value
Syntax DATE
Usage DECLARE @MyDate DATE

CREATE TABLE Table1 (Column1 DATE)
Varsayılan dize değişmez değeri biçimi

(alt düzey istemci için kullanılır)
yyyy-MM-dd

Daha fazla bilgi için alt düzey istemciler için geriye dönük uyumluluk bölümüne bakın.
Range 0001-01-01 through 9999-12-31 (1582-10-15 Informatica için aracılığıyla 9999-12-31 )

1 Ocak 1 CE (Ortak Çağ) - 31 Aralık 9999 CE (15 Ekim 1582 CE - 31 Aralık 9999 CE for Informatica)
Eleman aralıkları yyyy , bir yılı temsil eden ile arasındaki dört basamaktır 00019999 . informatica sınırları yyyy ile aralığıdır 15829999.

MM , belirtilen yıldaki bir ayı temsil eden iki basamaktır 0112 .

dd, belirtilen ayın gününü temsil eden aya 01bağlı olarak ile olan iki basamaktır31.
Karakter uzunluğu 10 pozisyon
Hassasiyet, ölçek 10, 0
Depolama boyutu 3 bayt, sabit
Depolama yapısı bir 3 baytlık tamsayı depolar tarihi
Accuracy Bir gün
Varsayılan değer 1900-01-01

Bu değer, zaman ile datetime2 veya datetimeoffset arasında örtük dönüştürme için eklenen tarih bölümü için kullanılır.
Calendar Gregorian
Kullanıcı tanımlı kesirli ikinci duyarlık No
Saat dilimi fark fark ve koruma No
Gün ışığından yararlanmaya duyarlı No

Tarih için desteklenen dize değişmez değerleri biçimleri

Aşağıdaki listeler tarih veri türü için geçerli dize değişmez biçimlerini gösterir.

[m]m, ddve [yy]yy ay, gün ve yılı bir dizede eğik çizgi (/), kısa çizgi (-) veya nokta (.) ayırıcı olarak temsil eder.

Yalnızca dört basamaklı veya iki basamaklı yıllar desteklenir. Mümkün olduğunda dört basamaklı yıl kullanın. İki basamaklı yılların dört basamaklı yıl olarak yorumlanması için kesme yılını temsil eden ile arasında bir tamsayı 00019999 belirtmek için , iki basamaklı yıl kesme sunucusu yapılandırma seçeneğini kullanın.

Informatica için aralığı yyyy ile 15829999sınırlıdır.

Kesme yılının son iki basamağını aşan veya bu rakama eşit olan iki basamaklı yıl, kesme yılıyla aynı yüzyılda yer alır. Kesme yılının son iki basamağını aşan iki basamaklı bir yıl, kesme yılından önce gelen yüzyıldadır. Örneğin, iki basamaklı yıl kesme varsayılan 2049ise, iki basamaklı yıl 49 olarak 2049 ve iki basamaklı yıl 50 olarak 1950yorumlanır.

Geçerli dil ayarı varsayılan tarih biçimini belirler. SET LANGUAGE ve SET DATEFORMAT deyimlerini kullanarak tarih biçimini değiştirebilirsiniz.

ydm Biçim tarih için desteklenmez.

Ay-gün-yıl için dize değişmez değerleri biçimleri

SET DATEFORMAT mdy;
  • [m]m/dd/[yy]yy
  • [m]m-dd-[yy]yy

Ay-yıl günü için dize değişmez değerleri biçimleri

SET DATEFORMAT myd;
  • [m]m/[yy]yy/dd
  • [m]m-[yy]yy-dd
  • [m]m.[yy]yy.dd

Gün-ay-yıl için dize değişmez değerleri biçimleri

SET DATEFORMAT dmy;
  • dd/[m]m/[yy]yy
  • dd-[m]m-[yy]yy
  • dd.[m]m.[yy]yy

Gün-yıl-ay için dize değişmez değerleri biçimleri

SET DATEFORMAT dym;
  • dd/[yy]yy/[m]m
  • dd-[yy]yy-[m]m
  • dd.[yy]yy.[m]m

Yıl-ay-gün için dize değişmez değerleri biçimleri

SET DATEFORMAT ymd;
  • [yy]yy/[m]m/dd
  • [yy]yy-[m]m-dd
  • [yy]yy-[m]m-dd

Alfabetik biçim listesi

  • [dd] mon[,] yyyy
  • dd mon[,][yy]yy
  • dd [yy]yy mon
  • [dd] yyyy mon
  • mon [dd][,] yyyy
  • mon dd[,] [yy]
  • mon yyyy [dd]
  • yyyy mon [dd]
  • yyyy [dd] mon

mon geçerli dilde verilen tam ay adını veya ay kısaltmasını temsil eder. Virgüller isteğe bağlıdır ve büyük harf kullanımı yoksayılır.

Belirsizliği önlemek için dört basamaklı yılları kullanın.

Gün eksikse, ayın ilk günü sağlanır.

ISO 8601 biçim listesi

  • yyyy-MM-dd
  • yyyyMMdd

SQL standardıyla aynı. Bu biçim, uluslararası standart olarak tanımlanan tek biçimdir.

Ayrıştırılmamış biçim listesi

  • [yy]yyMMdd
  • yyyy[MMdd]

Tarih verileri dört, altı veya sekiz basamakla belirtilebilir. Altı basamaklı veya sekiz basamaklı bir dize her zaman olarak ymdyorumlanır. Ay ve gün her zaman iki basamak olmalıdır. Dört basamaklı bir dize yıl olarak yorumlanır.

ODBC tarih biçimi

  • { d 'yyyy-MM-dd' }

ODBC API'lerine özgü.

W3C XML tarih biçimi

  • yyyy-MM-ddTZD

XML/SOAP kullanımı için desteklenir.

TZD saat dilimi belirleyicisi (Z veya +hh:mm-hh:mm):

  • hh:mm saat dilimi uzaklığını temsil eder. hh , saat dilimi uzaklığındaki saat sayısını temsil eden ile arasında değişen 014iki basamaktır.

  • mm , saat dilimi uzaklığındaki ek dakika sayısını temsil eden ile arasında değişen 059iki basamaktır.

  • + (artı) veya - (eksi), saat dilimi uzaklığının zorunlu işaretidir. Bu işaret, yerel saati elde etmek için saat dilimi uzaklığının Eşgüdümlü Evrensel Saatler (UTC) saatinden eklendiğini veya çıkarıldığını gösterir. Geçerli saat dilimi uzaklığı aralığı ile -14:00+14:00arasındadır.

ANSI ve ISO 8601 uyumluluğu

tarih , Gregoryen takvimin ANSI SQL standart tanımıyla uyumludur:

Tarih saat veri türleri Gregoryen biçimindeki tarihlerin 0001-01-01 CE ile 9999-12-31 CE tarih aralığında depolanmasına izin verir.

Alt düzey istemciler için kullanılan varsayılan dize değişmez değeri biçimi, olarak yyyy-MM-ddtanımlanan SQL standart formuyla uyumludur. Bu biçim, için ISO 8601 tanımıyla DATEaynıdır.

Note

Informatica için aralık (15 Ekim 1582 CE) ile 1582-10-15 (31 Aralık 9999 CE) sınırlıdır 9999-12-31 .

Alt düzey istemciler için geriye dönük uyumluluk

Bazı alt düzey istemciler saat, tarih, datetime2 ve datetimeoffset veri türlerini desteklemez . Aşağıdaki tabloda, SQL Server'ın üst düzey bir örneği ile alt düzey istemciler arasındaki tür eşlemesi gösterilmektedir.

SQL Server veri türü Alt düzey istemciye geçirilen varsayılan dize değişmez değeri biçimi Alt düzey ODBC Alt düzey OLEDB Alt düzey JDBC Alt düzey SQLCLIENT
time hh:mm:ss[.nnnnnnn] SQL_WVARCHAR veya SQL_VARCHAR DBTYPE_WSTR veya DBTYPE_STR Java.sql.String String veya SqString
date yyyy-MM-dd SQL_WVARCHAR veya SQL_VARCHAR DBTYPE_WSTR veya DBTYPE_STR Java.sql.String String veya SqString
datetime2 yyyy-MM-dd HH:mm:ss[.nnnnnnn] SQL_WVARCHAR veya SQL_VARCHAR DBTYPE_WSTR veya DBTYPE_STR Java.sql.String String veya SqString
datetimeoffset yyyy-MM-dd HH:mm:ss[.nnnnnnn] [+ or -]hh:mm SQL_WVARCHAR veya SQL_VARCHAR DBTYPE_WSTR veya DBTYPE_STR Java.sql.String String veya SqString

Tarih ve saat verilerini dönüştürme

Tarih ve saat veri türlerine dönüştürdüğünüzde SQL Server, tarih veya saat olarak tanımadığı tüm değerleri reddeder. CAST ve CONVERT işlevlerini tarih ve saat verileriyle kullanma hakkında bilgi için bkz. CAST ve CONVERT.

Tarihi diğer tarih ve saat türlerine dönüştürme

Bu bölümde, bir tarih veri türünü diğer tarih ve saat veri türlerine dönüştürdüğünüzde nelerin oluştuğu açıklanmaktadır.

Dönüştürme zamanı (n) olduğunda, dönüştürme başarısız olur ve hata iletisi 206 oluşturulur:

İşlenen türü çakışması: tarih saatle uyumsuz.

Dönüştürme datetime ise, tarih bileşeni kopyalanır. Aşağıdaki kod, bir tarih değerini tarih saat değerine dönüştürmenin sonuçlarını gösterir.

DECLARE @date AS DATE = '12-10-25';

DECLARE @datetime AS DATETIME = @date;

SELECT @date AS '@date',
       @datetime AS '@datetime';

Sonuç kümesi aşağıdadır.

@date      @datetime
---------- -----------------------
2025-12-10 2025-12-10 00:00:00.000

Dönüştürme smalldatetime olduğunda, tarih değeri smalldatetime aralığında olur, tarih bileşeni kopyalanır ve saat bileşeni olarak 00:00:00.000ayarlanır. Tarih değeri bir smalldatetime değeri aralığının dışında olduğunda, hata iletisi 242 oluşturulur ve smalldatetime değeri olarak NULLayarlanır:

Tarih veri türünün smalldatetime veri türlerine dönüştürülmesi, aralık dışı bir değere neden oldu.

Aşağıdaki kod, bir tarih değerini smalldatetime değerine dönüştürmenin sonuçlarını gösterir.

DECLARE @date AS DATE = '1912-10-25';

DECLARE @smalldatetime AS SMALLDATETIME = @date;

SELECT @date AS '@date',
       @smalldatetime AS '@smalldatetime';

Sonuç kümesi aşağıdadır.

@date      @smalldatetime
---------- -------------------
1912-10-25 1912-10-25 00:00:00

datetimeoffset(n)'e dönüştürme için tarih kopyalanır ve saat olarak 00:00.0000000 +00:00ayarlanır. Aşağıdaki kod, bir tarih değerini datetimeoffset(3) değerine dönüştürmenin sonuçlarını gösterir.

DECLARE @date AS DATE = '1912-10-25';

DECLARE @datetimeoffset AS DATETIMEOFFSET (3) = @date;

SELECT @date AS '@date',
       @datetimeoffset AS '@datetimeoffset';

Sonuç kümesi aşağıdadır.

@date      @datetimeoffset
---------- ------------------------------
1912-10-25 1912-10-25 00:00:00.000 +00:00

Dönüştürme datetime2(n) olduğunda, tarih bileşeni kopyalanır ve saat bileşeni olarak 00:00.000000ayarlanır. Aşağıdaki kod, tarih değerinidatetime2(3) değerine dönüştürmenin sonuçlarını gösterir.

DECLARE @date AS DATE = '1912-10-25';

DECLARE @datetime2 AS DATETIME2 (3) = @date;

SELECT @date AS '@date',
       @datetime2 AS '@datetime2(3)';

Sonuç kümesi aşağıdadır.

@date      @datetime2(3)
---------- -----------------------
1912-10-25 1912-10-25 00:00:00.000

Dize değişmez değerlerini tarihe dönüştürme

Dizelerin tüm bölümleri geçerli biçimlerdeyse, dize değişmez değerlerinden tarih ve saat türlerine dönüştürmelere izin verilir. Aksi takdirde bir çalışma zamanı hatası oluşur. Tarih ve saat türlerinden dize değişmez değerlerine kadar bir stil belirtmeyen örtük dönüştürmeler veya açık dönüştürmeler, geçerli oturumun varsayılan biçimindedir. Aşağıdaki tabloda, bir dize değişmez değerini tarih veri türüne dönüştürme kuralları gösterilmektedir.

Giriş dizesi değişmez değeri date
ODBC TARIHI ODBC dize değişmez değerleri datetime veri türüne eşlenir. ODBC DATETIME değişmez değerlerinden bir tarih türüne yapılan herhangi bir atama işlemi , datetime ile dönüştürme kurallarının tanımladığınız tür arasında örtük bir dönüştürmeye neden olur.
ODBC ZAMANI Önceki ODBC TARİh kuralına bakın.
ODBC TARIH SAATI Önceki ODBC TARİh kuralına bakın.
Sadece DATE Trivial
SADECE ZAMAN Varsayılan değerler sağlanır.
Sadece SAAT DILİMİ Varsayılan değerler sağlanır.
TARİh + SAAT Giriş dizesinin DATE bölümü kullanılır.
TARİh + SAAT DILIMI İzin verilmiyor.
SAAT + SAAT DILIMI Varsayılan değerler sağlanır.
TARİh + SAAT + SAAT DILIMI Yerel DATETIME öğesinin DATE bölümü kullanılır.

Examples

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 ('2022-05-08 12:35:29.1234567 +12:15' AS TIME (7)) AS 'time',
       CAST ('2022-05-08 12:35:29.1234567 +12:15' AS DATE) AS 'date',
       CAST ('2022-05-08 12:35:29.123' AS SMALLDATETIME) AS 'smalldatetime',
       CAST ('2022-05-08 12:35:29.123' AS DATETIME) AS 'datetime',
       CAST ('2022-05-08 12:35:29.1234567 +12:15' AS DATETIME2 (7)) AS 'datetime2',
       CAST ('2022-05-08 12:35:29.1234567 +12:15' AS DATETIMEOFFSET (7)) AS 'datetimeoffset';

Sonuç kümesi aşağıdadır.

Veri türü Output
time 12:35:29.1234567
date 2022-05-08
smalldatetime 2022-05-08 12:35:00
datetime 2022-05-08 12:35:29.123
datetime2 2022-05-08 12:35:29.1234567
datetimeoffset 2022-05-08 12:35:29.1234567 +12:15