Aracılığıyla paylaş


Tarih ve saat veri kullanma

Bu konu aşağıdaki bölümlerde, tarih ve saat veri türleri ve işlevleri kullanma hakkında bilgi ve örnekler sağlar.Tüm genel bakış için Transact-SQL Tarih ve saat veri türleri ve İşlevler, bkz: Tarih ve Saat İşlevleri (Transact-SQL).

  • Tarih ve saat veri türleri ile işleçleri kullanma

  • Tarih ve saat biçimleri kullanma

  • Dize hazır bilgi tarih ve saat biçimleri

  • Unseparated dize biçimi

  • ISO 8601 Biçimlendir

  • Alfabetik tarih biçimleri

  • Sayısal tarih biçimleri

  • Saat biçimleri

  • odbc tarih-saat biçimi

  • Tarih, saat, datetime2 ve datetimeoffset dönüştürme

  • Dize harflerin arasında dönüştürme ve saat(n), tarih, datetime2(n) ve datetimeoffset(n)

  • Tarih ve saat veri türleri arasında dönüştürme

  • cast kullanma ve saat, tarih, datetime2 ve datetimeoffset dönüştürme

  • convert Functionq stili değişkenleri

  • sql Server tarih ve saat sınırlamaları

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

  • Örnekler

Tarih ve saat veri türleri ile işleçleri kullanma

The relational operators (<, <=, >, >=, <>), comparison operators (=, <, <=, >, >=, <>, !<, !>) ve Boole işleçler ve Boole yüklemler (null, not null, ın, EXISTS arasında değil var ve ister) desteklenen tüm tarih ve saat veri türlerini.

Tarih ve saat aritmetik işleçler

Ekleme ve çıkarmak için tüm tarih ve saat veri türleri içindateadd ve DATEDIFF.

Tarih ve saat biçimleri kullanma

Dize hazır bilgi biçimleri uygulamalarda kullanıcılara veri ancak temel tamsayı depolama biçimi değil de sunumunu etkileyen SQL Server.Ancak, SQL Server bir tarih değeri bir dize hazır bilgi biçimi içinde yorumlamak, giriş olarak bir uygulama veya kullanıcı depolama için ya da bir tarih işlev, farklı tarihler.Dize hazır bilgi biçimi, veri türü ve çalışma zamanı birleşimi yorumunu bağlıdır VBLONGDATE set, Dil ve varsayılan dil seçeneği ayarları.

Bazı dize hazır bilgi biçimleri bu ayarlardan etkilenmez.Ayarların biçimini doğru olduğundan emin değilseniz, bu ayarları, bağımlı bir biçimde kullanmayı düşünün.The ISO 8601 format does not depend on these settings and is an international standard.Transact-SQL that uses string literal formats, dependent on system settings, is less portable.

Varsayılan dize hazır bilgi biçimi bulmak için kapalı-düzey istemciler, her tarih ve saat veri türü için konusuna bakın.Tüm genel bakış için Transact-SQL Tarih ve saat veri türleri ve İşlevler, bkz: Tarih ve Saat İşlevleri (Transact-SQL).

The ydm date format is not supported for the date, datetime2 and datetimeoffset types.Bir çalışma saat hata oluşturuldu.

Dize hazır bilgi tarih ve saat biçimleri

Aşağıdaki tablo listeleri farklı bir tarih ve saat biçimleri dize.VBLONGDATE bağımlı olmayan ve çok dilli tarih ve saat biçimlerini kullanmanızı öneririz.ISO 8601 biçimleri, ' 1998-02-23T14:23:05' ve ' 1998-02-23T14:23:05-08: 00' Uluslararası bir standart olan yegane biçimlerdir.Bunlar VBLONGDATE veya varsayılan oturum açma dile bağımlı değildir ve çok dilli.

Tarih ve saat bölümü

Biçim türü

Biçim örneği

Diğer biçimleri ile birleştirebilirsiniz

Bağımlı VBLONGDATE

Çoklu Dil

Date

Un-separated

ISO 8601

'19980223'

Evet

Hayır

Evet

Date

Sayısal

'02/23/1998'

Evet

EVET

Hayır

(VBLONGDATE)

Date

ISO 8601 sayısal

'1998-02-23'

Evet

Hayır

Hayır

Date

Alfabetik

' 23 Şubat 1998'

Evet

Hayır

Hayır

(ay veya kısa ay)

Date

odbc tarih

{d ' 23.02.1998' }

Hayır

Hayır

Evet

Time

ISO 8601 saati

'14:23:05'

'10:00:00.123456'

Evet

Hayır

Evet

Time

odbc saat

{t '14:23:05' }

Hayır

Hayır

Evet

Tarih-saat

odbc tarih-saat

{ts ' 1998-02-23 14: 23: 05'}

Hayır

Hayır

Evet

Tarih-saat

ISO 8601

' 1998-02-23T14:23:05'

' 1998-02-23T14:23:05-08: 00'

Hayır

Hayır

Yes date, datetime2, datetimeoffset.

Tarih-saat

ANSI sql standart

'1998-02-23 14:23:05'

'1998-02-23 14:23:05 -08:00'

Hayır

No (datetime2, datetimeoffset)

Yes (datetime)

Yes date, datetime2, datetimeoffset.

Tarih-saat

Tarih ve saat birleşimi

'19980223 14:23:05'

' 02/23/1998 14:23: 05'

'1998-02-23 10:00:00.123'

' 23 Şub 1998 14: 23: 05'

Hayır

Evet

(tarih bölümü)

Hayır

Saat dilimi

TimeZone Biçimlendir

'+12:00'

'01:00'

'-08:00'

'Z'

Evet

Hayır

Evet

Aşağıdaki ifadeleri, dil ve VBLONGDATE ayarlama ayarlarını etkilerini gösterir.

DECLARE @Today date = '12/1/2003';
DECLARE @MyTime time = '12:30:22';
DECLARE @MyDatetimeoffset datetimeoffset = '12/1/2003 12:30:22 -5:00';
SET LANGUAGE Italian
    -- Returns: Changed language setting to Italiano.
SELECT DATENAME(month, @Today) AS 'Month Name';
    -- Returns: dicembre
SELECT CONVERT(VARCHAR(30), @MyDatetimeoffset) AS 'DATETIMEOFFSET';
    -- Returns: dic  1 2003 12:30PM -05:00
SELECT DATENAME(hour, @MyTime) As 'Hour Name';
    -- Returns: 12

SET LANGUAGE us_english;
    -- Returns: Changed language setting to us_english.
SELECT DATENAME(month, @Today) AS 'Month Name';
    -- Returns: December
SELECT CONVERT(VARCHAR(30), @MyDatetimeoffset) AS 'DATETIMEOFFSET';
    -- Returns: Dec  1 2003 12:30PM -05:00
SELECT DATENAME(hour, @MyTime) As 'Hour Name';
    -- Returns: 12
GO
-- Set date format to month, day, year.
SET DATEFORMAT mdy;
GO
DECLARE @datevar date = '12/31/1998';
SELECT @datevar AS DateVar;
    -- Returns: 1998-12-31
GO
-- Set date format to year, day, month. 
SET DATEFORMAT ydm;
GO
DECLARE @datevar datetimeoffset = '1998/31/12 12:30:22 -05:00';
SELECT @datevar AS DateVar;
    -- Returns: Msg 241, Conversion failed when converting 
    -- date and/or time from character string.
GO
-- Set date format to year, month, day.
SET DATEFORMAT ymd;
GO
DECLARE @datevar date = '12/31/1998';
SELECT @datevar AS DateVar;
    -- Returns: 1998-12-31
GO

Unseparated dize biçimi

Tarih veri unseparated bir dize olarak belirtebilirsiniz.Tarih verileri, dört, altı veya sekiz basamağı, boş bir dize veya bir tarih değeri olmadan saat değeri kullanılarak belirtilebilir.

Ayırıcılar olmaksızın sayısal girdileri gibi tüm sayısal tarih girişlerini AYARLAMAK VBLONGDATE oturum ayarı uygulanmaz.Altı haneli ya da sekiz basamaklı dizeler olarak her zaman yorumlanır ymd.Ay ve gün, her zaman iki basamaklı bir sayı olmalıdır.

Bu, geçerli un-separated dize biçimi şöyledir: [19]960415

Bir dize yalnızca dört basamaklı yıl olarak yorumlanır.Ay ve tarih 1 Ocak için küme.Yalnızca dört sayı belirttiğinizde, yüzyıl eklemeniz gerekir.

ISO 8601 Biçimlendir

ISO 8601 tarih ile saat biçimi aşağıdaki gibidir:

  • YYYY-MM-DDThh:mm:ss[.nnnnnnn][{+|-}hh:mm]

  • YYYY-MM-DDThh:mm:ss[.nnnnnnn]Z (UTC, Coordinated Universal Time)

The T indicates the start of the time part of the date-time value.

ISO 8601 biçiminde kullanmak için her öğenin biçiminde belirtmeniz gerekir.Bu t, iki nokta üst üste (:), + ya da - ve nokta (.).Kesirli saniye köşeli ayraçlar belirtmek veya saat dilimi mahsup bileşen isteğe bağlıdır.

Saat bileşeni 24 saat biçiminde belirtilir.

ISO 8601 biçiminde kullanmanın avantajı, uluslararası bir standart olmasıdır.Bu biçimi kullanarak, belirtilen tarih ve saat değerleri kesindir.Bu biçim AYARLAMAK VBLONGDATE göre dil, oturumu varsayılan dil ayarlarını etkilenmez.

ISO 8601 biçiminde belirtilen tarih ve saat değerleri iki örnekleri şunlardır:

  • 2004-05-23T14:25:10

  • 2004-05-23T14:25:10.1234567 + 07: 00

Alfabetik tarih biçimleri

Bir ay gibi bir ad belirleyin Nisan veya kısaltma Nis İngilizce.Bunlar, dil ayarıyla belirtilmelidir oturum, örneğin, avril veya avr Fransızca.Virgül isteğe bağlıdır ve büyük/küçük harf göz ardı edilir.

Bazı alfabetik tarih biçimlerini kullanma yönergeleri şunlardır:

  • Tarih ve saat veri tek tırnak işareti (') içine alın.

  • Yılın son iki basamağını belirtirseniz, değerinin son iki sayıdan daha az değerler iki basamaklı yıl kesme yapılandırma seçeneği olan kesme yıl olarak aynı yüzyıl içinde.Kesme yılından önce gelen yüzyılın büyük veya bu seçenek değerinin eşit değerler arasındadır.Örneğin, two digit year cutoff 2050 (varsayılan) ise 25 2025 yorumlanır ve 50 1950 yorumlanır.Belirsizlik önlemek için dört basamaklı yıl kullanın.

  • Ayın ilk günü eksikse, sağlanır.

  • Ayın alfabetik formunda belirttiğinizde set VBLONGDATE oturum ayarı uygulanmaz.

  • Aşağıdaki biçimler için geçerli alfabetik biçimleri olan SQL Server tarih verisi. Parantezler içine karakterleri isteğe bağlıdır. 

  • 1996 Nis [il] [15] []

  • Nis [il] 15 [,] [19] 96

  • Nis [il] [15] 1996

  • [15] Nis [il] [,] 1996

  • 15 Nis [il] [,] [19] 96

  • 15 [19] 96 Nis [il]

  • [15] 1996 Nis [il]

  • 1996 NİS [IL] [15]

  • [15] 1996 NİS [IL]

Sayısal tarih biçimleri

Bir ay, sayı tarih verileri belirtebilirsiniz.Örneğin, 5/20/97 May 1997 yirminci günü temsil eder.Sayısal tarih biçimini kullandığınızda, yıl, ay ve gün eğik çizgi işareti (/) bir dize belirtin ayırıcısı olarak nokta (.) veya tire (-).Bu dize aşağıdaki biçimde görünmesi gerekir:

number separator number separator number [time] [time]

Aşağıdaki sayısal biçimler geçerlidir:

  • [0] 4/15 / [19] 96--(AGY)

  • [0] 4 - 15-[19] 96--(AGY)

  • [0] 4.15.[19] 96--(AGY)

  • 4 [0] / [19] 96/15--(myd)

  • 15 / [0] 4 / [19] 96--(GAY)

  • 15 / [19] 96 / [0] 4--(dym)

  • [19] 96/15 / [0] 4--(ydm)

  • [19] 96 / [0] 4/15--(YAG'dir)

Bir oturumu için varsayılan dil VBLONGDATE, oturum açma, bir dil deyim veya VBLONGDATE küme deyim için varsayılan dil tarafından küme.Dil ayarlandığında us_english varsayılan oturum açma ya da dil deyim, varsayılan sıra tarih için mdy.

Tarih sırası ayarlama VBLONGDATE kullanarak değiştirmek deyim.Tarih değerleri nasıl yorumlanır ayarlayın VBLONGDATE için belirler.Sırasını Ayarlar eşleşmezse, değerleri tarih olarak, çünkü bunlar aralık dışında veya değerleri misinterpreted yorumlanır değil.Örneğin, 10/12/08 altı tarihler, VBLONGDATE ayarına bağlı olarak yorumlanabilir.Dört basamaklı yıl yıl olarak yorumlanacaktır.

Saat biçimleri

SQL Serversaat verileri aşağıdaki biçimlerden tanır.Her formatı tek tırnak işareti (') içine alın.

  • 14:30

  • 14:30[:20:999]

  • 14:30[:20.9]

  • 04:00:00 AM

  • 16:00:00 AM

  • [:30:20:500] [0] 4 AM

Aþaðýdaki ifadeleri farklı girdiler cast işlev için dönüş değerlerini gösterir.

SELECT CAST('01/01/2000 14:30' AS datetime2)
    --Returns: 2000-01-01 14:30:00.0000000
SELECT CAST('01/01/2000 14:30:20:999' AS datetime2)
    -- Returns: 2000-01-01 14:30:20.9990000
SELECT CAST('01/01/2000 14:30:20.9' AS datetime2)
    -- Returns: 2000-01-01 14:30:20.9000000
SELECT CAST('01/01/2000 4am' AS datetime2)
    -- Returns: 2000-01-01 04:00:00.0000000
SELECT CAST('01/01/2000 4 PM' AS datetime2)
    -- Returns: 2000-01-01 16:00:00.0000000
SELECT CAST('01/01/2000 04:30:20:500AM' AS datetime2)
    -- Returns: 2000-01-01 04:30:20.5000000
SELECT CAST('01/01/2000 04:30:20:500 AM' AS datetime2)
    -- Returns: 2000-01-01 04:30:20.5000000
GO

12 Öğleden sonra am veya pm saat değeri önce veya olup olmadığını gösteren bir sonek belirtebilirsiniz.am veya pm durum göz ardı edilir.

Saat 12 saatlik veya 24 saatlik saat kullanılarak belirtilebilir.Saat değerleri şu şekilde yorumlanır.

  • Saat değeri 00 am belirtmek mi olsun (am), gece yarısından sonra saat temsil eder.Ne zaman saat 00 eşittir pm belirtemezsiniz.

  • am veya pm ne belirtilmezse, 01-11 değerleri saat öğleden önce saat temsil eder.Saat öğleden önce de temsil ettikleri zaman am belirtilir.pm belirtilirse, öğleden sonraki saatler temsil eder.

  • 12 Saat değerinin ne am veya pm belirtilmezse öğle saatinde başlayan saat temsil eder.Yoksa am belirtilmişse, gece yarısı başlar saat gösterir.pm belirtilirse, öğle saatinde başlayan saat temsil eder.Örneğin: 12: 01 12:01 am gece yarısından sonra 1 dakika iken, 12:01 pm olduğu gibi öğleden sonra 1 dakikadır.12:01 am belirterek 00: 01 veya 00: 01'de aynıdır.

  • 13-23 Saat değerleri am veya pm belirtilmezse, öğleden sonraki saatler temsil eder.Ayrıca pm ne zaman belirtilen öğleden sonraki saatler temsil ettikleri.13-23 Saat değerinin ne olduğunu am belirtemezsiniz.

  • Bir 24 saat değeri geçerli değil; 12: 00'de veya 00: 00 gece göstermek için kullanın.

Milisaniye cinsinden önünde ya da üste (:) veya nokta (.).Üste koyarak, sayı ikinci, binde demektir.Başına bir nokta koyarak, tek basamaklı bir ikinci, onda anlamına gelir ikinci, yüzde iki basamak anlamına gelir ve ikinci, binde üç basamak anlamına gelir.Örneğin, 12:30:20:1 saniye yirmi ve tek - 922.337.203.685.477,5707 gösterir geçen 12: 30; 12:30:20.1 saniye yirmi ve tek - onuncu gösterir 12: 30 tamamlamıştır.

odbc tarih-saat biçimi

odbc API odbc zaman damgası veri çağırır, tarih ve saat değerleri temsil etmek için çıkış sıralarını tanımlar.Bu odbc zaman damgası biçimi ole db dil tanımını (DBGUID-sql) tarafından da desteklenir ve Microsoft için ole db sağlayıcı SQL Server.ado, ole db ve odbc tabanlı API'leri kullanan uygulamalar bu odbc zaman damgası biçimi, tarihleri ve saatleri temsil etmek için kullanabilirsiniz.

SQL Serverodbc veri biri olacak şekilde her zaman işler datetime veri türü.

Biçimi, odbc zaman damgası çıkış sıralarını şunlardır:

{ literal_type 'constant_value' }

  • literal_type
    Çıkış sırasını belirtir.Geçerli bağımsız değişkenleri şunlardır literal_type.

    d = yalnızca tarih

    t = saat only

    TS = saat damgası (saat + tarih)

  • 'constant_value'
    Is the value of the escape sequence.constant_value must follow these formats for each literal_type.

    literal_type

    constant_value biçimi

    d

    YYYY-AA-GG

    t

    hh:mm:ss[.fff]

    TS

    YYYY-MM-DDhh:mm:ss[.fff]

odbc örnekleri saat ve tarih sabitleri aşağıdaki gibidir:

  • {ts ' 1998-05-02 01:23:56.123' }

  • {d ' 1990-10-02' }

  • {t '13:33:41' }

Do not confuse the ODBC and OLE DB timestamp data type name with the Transact-SQL timestamp data type name.Kayıtları tarih ve saatleri, odbc ve ole db zaman damgası veri türü.The Transact-SQL timestamp data type is a binary data type that has no time-related values.

Tarih, saat, datetime2 ve datetimeoffset dönüştürme

Farklı tarih türleri arasındaki dönüştürmelerin iki tür vardır: açık ve kapalı.Örtük dönüştürmeler, cast veya convert işlevleri kullanmadan oluşur.Açıkça dönüştürmeleri cast veya convert işlevleri gerektirir.

Dize harflerin arasında dönüştürme ve saat(n), tarih, datetime2(n) ve datetimeoffset(n)

Dize hazır bilgi tarih ve saat türleri için türünden dizeler geçerli biçimlerde bölümlerdir, izin verilir.Aksi halde, bir çalışma zamanı hatası ortaya çıkar.

Örtük dönüştürmeler ya da dize hazır bilgi tarih ve saat türleri'nden bir stil belirtin açıkça dönüştürmeleri geçerli oturum varsayılan biçiminde olacaktır.

Tarih, saat, datetime2 ve datetimeoffset veri türleri arasında örtülü dönüşüm için karakter dizeleri, sql standart bir biçim yyy-aa-gg hh:mi:ss. [nnnnnnn] 121 stiline dönüştürün, uygulanacak.convert stili 0 biçimi, Pzt gg yyyy hh:miAM (veya pm), datetime ve smalldatetime veri türleri için uygulanır.

Aşağıdaki tablo arasında dönüşüm kurallarını gösterir date, time, datetime2 ve datetimeoffset tipleri ve dize hazır bilgi.

Giriş dize hazır bilgi

date

time(n)

datetime2(n)

datetimeoffset(n)

ODBC TARİH

Bkz: Not 1.

Bkz: Not 1.

Bkz: Not 1.

Bkz: Not 1.

ODBC ZAMAN

Bkz: Not 1.

Bkz: Not 1.

Bkz: Not 1.

Bkz: Not 1.

ODBC DATETIME

Bkz: Not 1.

Bkz: Not 1.

Bkz: Not 1.

Bkz: Not 1.

Yalnızca tarih

Önemsiz

Varsayılan değerleri sağlanan

SAAT bölümünü varsayılan değer 00: 00: 00.

SAAT bölümünü varsayılan değer 00: 00: 00.Varsayılan saat DİLİMİ değeri + 00: 00.

Yalnızca saati

Varsayılan değerleri sağlanan

Önemsiz

TARİH bölümü varsayılanlara 1900-1-1.

TARİH bölümü varsayılanlara 1900-1-1.Saat DİLİMİ varsayılan + 00: 00.

Yalnızca saat DİLİMİ

Varsayılan değerleri sağlanan

Varsayılan değerleri sağlanan

Varsayılan değerleri sağlanan

Varsayılan değerleri sağlanan

TARİH + SAAT

TARİH bölümü giriş dize kullanılır.

Giriş zaman parçası dize kullanılır.

Önemsiz

Varsayılan saat DİLİMİ değeri + 00: 00.

TARİHİ + TIMEZONE

İzin verilmiyor

İzin verilmiyor

İzin verilmiyor

İzin verilmiyor

SÜRESİ + TIMEZONE

Varsayılan değerleri sağlanan

Giriş zaman parçası dize kullanılır.

TARİH bölümü varsayılanlara 1900-1-1.Saat DİLİMİ giriş dikkate alınmaz.

TARİH bölümü varsayılanlara 1900-1-1.

TARİH + SAAT + TIMEZONE

Yerel DATETIME tarih bölümü kullanılacaktır.

Yerel DATETIME zaman parçası kullanılır.

Yerel DATETIME kullanılır.

Önemsiz

Dönüştürme notları

  1. odbc dize hazır bilgileri eşleştirilir datetime veri türü.odbc DATETIME hazır gelen herhangi bir atama işlemi date, time, datetime2, veya datetimeoffset türleri arasında bir örtük dönüştürme neden olur datetime ve bu türler gibi tarafından tanımlanan dönüştürme kuralları.

  2. Kesirli saniye duyarlık, datetime doğru bir üç-saniyenin (eşdeğer 3.33 milisaniye veya 0.00333 saniye) olarak vardır.Değerler.000,.003 veya.007 saniye artışlarla yuvarlanır. '22/08/1995 10:15:19:999' çünkü yuvarlak '. 999' precision aşıyor.

  3. İçin time(3), datetime2(3) veya datetimeoffset(3), kesirli saniye duyarlık sahip bir doğruluğunu milisaniyelik bir.Bu nedenle, ' 1995-8-22 10:15:19:999' yuvarlanır değil.

  4. Bölümü giriş saat DİLİMİ uzaklığı ss hem mm çift basamak olması her zaman olmalıdır.Oturum, ya da + veya –, zorunludur.

Tarih ve saat veri türleri arasında dönüştürme

Bu bölümdeki tablolarda, her aşağıdaki tarih ve saat veri türü diğer tarih ve saat veri türleri için nasıl dönüştürülür açıklar:

  • date

  • time(n)

  • datetime

  • smalldatetime

  • datetimeoffset(n)

  • datetime2

Tarih veri türü

Aşağıdaki tablo ne olacağı açıklanır, bir date veri türü dönüştürülür diğer tarih ve saat veri türleri.

Veri türüne dönüştürmek için

Dönüştürme ayrıntıları

time(n)

Dönüştürme başarısız olur ve hata iletisi 206 ortaya çıkar: "Operand türü clash: Tarih ile saat uyumlu değil".

datetime

Tarih kopyalanır.Aşağıdaki kod gösterir sonuçlar dönüştürme bir date için değer bir datetime değer.

DECLARE @date date;
DECLARE @datetime datetime;
SET @date = '12-10-25';
SET @datetime = @date;
SELECT @date AS '@date', @datetime AS '@datetime';
--Result
--@date      @datetime
------------ -----------------------
--2025-12-10 2025-12-10 00:00:00.000
--
--(1 row(s) affected)

smalldatetime

Zaman date değer aralığında olan bir smalldatetime, tarih bileşeni kopyalanır ve saat bileşeni küme için 00:00:00.000.Zaman date değer aralık dışında olan bir smalldatetime değer, hata iletisi 242 oluşturuldu: "Smalldatetime veri türü tarih veri türü dönüştürme bir aralık dışı değer sonuçlandı.";ve smalldatetime değeri küme null.

Aşağıdaki kod gösterir sonuçlar dönüştürme bir date için değer bir smalldatetime değer.

DECLARE @date date;
DECLARE @smalldatetime smalldatetime;
SET @date = '1912-10-25';
SET @smalldatetime = @date;
SELECT @date AS '@date', @smalldatetime AS '@smalldatetime';
--Result
--@date      @smalldatetime
------------ -----------------------
--1912-10-25 1912-10-25 00:00:00
--
--(1 row(s) affected)

datetimeoffset(n)

Tarih kopyalanır ve saat küme 00:00.0000000 + 00: 00.

Aşağıdaki kod gösterir sonuçlar dönüştürme bir date için değer bir datetimeoffset(3) değer.

DECLARE @date date;
DECLARE @datetimeoffset datetimeoffset(3);
SET @date = '1912-10-25';
SET @datetimeoffset = @date;
SELECT @date AS '@date', @datetimeoffset AS '@datetimeoffset';
--Result
--@date      @datetimeoffset
------------ ------------------------------
--1912-10-25 1912-10-25 00:00:00.000 +00:00
--
--(1 row(s) affected)

datetime2(n)

Tarih bileşeni kopyalanır ve saat bileşeni 00:00.000000 için küme.

Aşağıdaki kod gösterir sonuçlar dönüştürme bir date için değer bir datetime2(3) değer.

DECLARE @date dat;e
DECLARE @datetime2 datetime2(3);
SET @date = '1912-10-25';
SET @datetime2 = @date;
SELECT @date AS '@date', @datetime2 AS '@datetime2(3)';
--Result
--@date      @datetime2(3)
------------ -----------------------
--1912-10-25 1912-10-25 00:00:00.000
--
--(1 row(s) affected)

saat(n) veri türü

Aşağıdaki tablo ne olacağı açıklanır, bir time veri türü dönüştürülür diğer tarih ve saat veri türleri.

Veri türüne dönüştürmek için

Dönüştürme ayrıntıları

time(n)

Saat, dakika ve saniye kopyalanır.Hedef kesinlik kaynak duyarlılığı daha az olduğunda, kesirli saniye için kesilecek uyma hedef duyarlılık.

Aşağıdaki örnekte gösterildiği sonuçlar dönüştürme bir time(4) için değer bir time(3) değer.

DECLARE @timeTo time(3);
DECLARE @timeFrom time(4);
SET @timeFrom = '12:34:54.1234';
SET @timeTo = @timeFrom;
SELECT @timeTo AS 'time(3)', @timeFrom AS 'time(4)';
--Results
--time(3)      time(4)
-------------- -------------
--12:34:54.123 12:34:54.1234
--
--(1 row(s) affected)

date

Dönüştürme başarısız olur ve hata iletisi 206 ortaya çıkar: "Operand türü clash: Tarih ile saat uyumlu değil".

datetime

Saat, dakika ve saniye deðerleri kopyalanır; tarih bileşeni ve küme için ' 1900-01-01'.Zaman Kesirli saniye duyarlık, time(n) değeri üç basamak büyük datetime sonucu kesildi.

Aşağıdaki kod gösterir sonuçlar dönüştürme bir time(4) için değer bir datetime değer.

DECLARE @time time(4);
DECLARE @datetime datetime;
SET @time = '12:15:04.1234';
SET @datetime = @time;
SELECT @time AS '@time', @datetime AS '@datetime';
--Result
--@time         @datetime
--------------- -----------------------
--12:15:04.1234 1900-01-01 12:15:04.123
--
--(1 row(s) affected)

smalldatetime

' 1900 Tarih küme-01-01' ve saat ve dakika değerler kopyalanır.Saniye ve Kesirli saniye, 0 olarak küme.

Aşağıdaki kod gösterir sonuçlar dönüştürme bir time(4) için değer bir smalldatetime değer.

DECLARE @time time(4);
DECLARE @smalldatetime smalldatetime;
SET @time = '12:15:04.1234';
SET @smalldatetime = @time;
SELECT @time AS '@time', @smalldatetime AS '@smalldatetime';
--Result
--@time         @smalldatetime
--------------- -----------------------
--12:15:04.1234 1900-01-01 12:15:00
--
--(1 row(s) affected)

datetimeoffset(n)

' 1900 Tarih küme-01-01' ve saat kopyalanır.Saat dilimi kapalıküme olan küme için + 00: 00.Zaman Kesirli saniye duyarlık, time(n) değerdir doğruluğunu büyük datetimeoffset(n) değer, değer için kesiliyor uyma.

Aşağıdaki örnekte gösterildiği sonuçlar dönüştürme bir time(4) için değer bir datetimeoffset(3) türü.

DECLARE @time time(4);
DECLARE @datetimeoffset datetimeoffset(3);
SET @time = '12:15:04.1234';
SET @datetimeoffset = @time;
SELECT @time AS '@time', @datetimeoffset AS '@datetimeoffset';
--Result
--@time         @datetimeoffset
--------------- ------------------------------
--12:15:04.1234 1900-01-01 12:15:04.123 +00:00
--
--(1 row(s) affected)

datetime2(n)

' 1900 Tarih küme-01-01' saat bileşeni kopyalanır ve saat dilimi uzaklığı 00: 00 olarak küme.Zaman Kesirli saniye duyarlık, datetime2(n) değeri büyüktür time(n) değer, değer kesilerek uyma.

Aşağıdaki örnekte gösterildiği sonuçlar dönüştürme bir time(4) için değer bir datetime2(2) değer.

DECLARE @time time(4);
DECLARE @datetime2 datetime2(3);
SET @time = '12:15:04.1234';
SET @datetime2 = @time;
SELECT @datetime2 AS '@datetime2', @time AS '@time';
--Result
--@datetime2              @time
------------------------- -------------
--1900-01-01 12:15:04.123 12:15:04.1234
--
--(1 row(s) affected)

dateTime veri türü

Aşağıdaki tablo ne olacağı açıklanır, bir datetime veri türü dönüştürülür diğer tarih ve saat veri türleri.

Veri türüne dönüştürmek için

Dönüştürme ayrıntıları

date

Yıl, ay ve gün kopyalanır.Saat bileşeni 00:00:00.000 için küme.

Aşağıdaki kod gösterir sonuçlar dönüştürme bir date için değer bir datetime değer.

DECLARE @date date;
DECLARE @datetime datetime;
SET @date = '12-21-05';
SET @datetime = @date;
SELECT @datetime AS '@datetime', @date AS '@date';
--Result
--@datetime               @date
------------------------- ----------
--2005-12-21 00:00:00.000 2005-12-21

time(n)

Saat bileşeni kopyalanır ve tarih bileşeni küme için ' 1900-01-01'.Zaman kesirli duyarlığını time(n) üç basamak büyük değer, değer için kesilecek uyma.

Aşağıdaki örnekte gösterildiği sonuçlar dönüştürme bir time(4) için değer bir datetime değer.

DECLARE @time time(4);
DECLARE @datetime datetime;
SET @time = '12:10:05.1234';
SET @datetime = @time;
SELECT @datetime AS '@datetime', @time AS '@time';
--Result
--@datetime               @time
------------------------- -------------
--1900-01-01 12:10:05.123 12:10:05.1234
--
--(1 row(s) affected)

smalldatetime

Saat ve dakika kopyalanır.Saniye ve Kesirli saniye, 0 olarak küme.

Aşağıdaki kod gösterir sonuçlar dönüştürme bir smalldatetime için değer bir datetime değer.

DECLARE @smalldatetime smalldatetime;
DECLARE @datetime datetime;
SET @smalldatetime = '12-01-01 12:32';
SET @datetime = @smalldatetime;
SELECT @datetime AS '@datetime', @smalldatetime AS '@smalldatetime';
--Result
--@datetime               @smalldatetime
------------------------- -----------------------
--2001-12-01 12:32:00.000 2001-12-01 12:32:00
--
--(1 row(s) affected)

datetimeoffset(n)

Tarih ve saat bileşenleri kopyalanır.Saat dilimini kesirli kısmı atılır.Zaman kesirli duyarlığını datetimeoffset(n) üç basamak büyük değer, değer kesilecek.

Aşağıdaki örnekte gösterildiği sonuçlar dönüştürme bir datetimeoffset(4) için değer bir datetime değer.

DECLARE @datetimeoffset datetimeoffset(4);
DECLARE @datetime datetime;
SET @datetimeoffset = '1968-10-23 12:45:37.1234 +10:0';
SET @datetime = @datetimeoffset;
SELECT @datetime AS '@datetime', @datetimeoffset AS '@datetimeoffset';
--Result
--@datetime               @datetimeoffset
------------------------- ------------------------------
--1968-10-23 12:45:37.123 1968-10-23 12:45:37.1234 +01:0
--
--(1 row(s) affected)

datetime2(n)

Tarih ve saat kopyalanır.Zaman kesirli duyarlığını datetime2(n) üç basamak büyük değer, değer kesilecek.

Aşağıdaki örnekte gösterildiği sonuçlar dönüştürme bir datetime2(4) için değer bir datetime değer.

DECLARE @datetime2 datetime2(4);
DECLARE @datetime datetime;
SET @datetime2 = '1968-10-23 12:45:37.1237';
SET @datetime = @datetime2;
SELECT @datetime AS '@datetime', @datetime2 AS '@datetime2';
--Result
--@datetime               @datetime2
------------------------- ------------------------
--1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237
--
--(1 row(s) affected)

smalldatetime veri türü

Aşağıdaki tablo ne olacağı açıklanır, bir smalldatetime veri türü dönüştürülür diğer tarih ve saat veri türleri.

Veri türüne dönüştürmek için

Dönüştürme ayrıntıları

date

Yıl, ay ve gün kopyalanır.

Aşağıdaki kod gösterir sonuçlar dönüştürme bir smalldatetime için değer bir date değer.

DECLARE @smalldatetime smalldatetime;
DECLARE @date dat;e
SET @smalldatetime = '1955-12-13 12:43:10';
SET @date = @smalldatetime;
SELECT @smalldatetime AS '@smalldatetime', @date AS 'date';
--Result
--@smalldatetime          date
------------------------- ----------
--1955-12-13 12:43:00     1955-12-13
--
--(1 row(s) affected)

time(n)

Saat, dakika ve saniye kopyalanır.Kesirli saniye, 0 olarak küme.

Aşağıdaki kod gösterir sonuçlar dönüştürme bir smalldatetime için değer bir time(4) değer.

DECLARE @smalldatetime smalldatetime;
DECLARE @time time(4);
SET @smalldatetime = '1955-12-13 12:43:10';
SET @time = @smalldatetime;
SELECT @smalldatetime AS '@smalldatetime', @time AS 'time';
--Result
--@smalldatetime          time
------------------------- -------------
--1955-12-13 12:43:00     12:43:00.0000
--
--(1 row(s) affected)

datetime

The smalldatetime value is copied to the datetime value.Kesirli saniye, 0 olarak küme.

Aşağıdaki kod gösterir sonuçlar dönüştürme bir smalldatetime için değer bir datetime değer.

DECLARE @smalldatetime smalldatetime;
DECLARE @datetime datetime;
SET @smalldatetime = '1955-12-13 12:43:10';
SET @datetime = @smalldatetime;
SELECT @smalldatetime AS '@smalldatetime', @datetime AS 'datetime';
--Result
--@smalldatetime          datetime
------------------------- -----------------------
--1955-12-13 12:43:00     1955-12-13 12:43:00.000
--
--(1 row(s) affected)

datetimeoffset(n)

The smalldatetime value is copied to the datetimeoffset(n) value.Kesirli saniye, 0 olarak küme ve saat dilimi uzaklığı ayarlamak için + 00: 0.

Aşağıdaki kod gösterir sonuçlar dönüştürme bir smalldatetime için değer bir datetimeoffset(4) değer.

DECLARE @smalldatetime smalldatetime;
DECLARE @datetimeoffset datetimeoffset(4);
SET @smalldatetime = '1955-12-13 12:43:10';
SET @datetimeoffset = @smalldatetime;
SELECT @smalldatetime AS '@smalldatetime', @datetimeoffset AS 'datetimeoffset(4)';
--Result
--@smalldatetime          datetimeoffset(4)
------------------------- ------------------------------
--1955-12-13 12:43:00     1955-12-13 12:43:00.0000 +00:0
--
--(1 row(s) affected)

datetime2(n)

The smalldatetime value is copied to the datetime2(n) value.Kesirli saniye, 0 olarak küme.

Aşağıdaki kod gösterir sonuçlar dönüştürme bir smalldatetime için değer bir datetime2(4) değer.

DECLARE @smalldatetime smalldatetime;
DECLARE @datetime2 datetime2(4);
SET @smalldatetime = '1955-12-13 12:43:10';
SET @datetime2 = @smalldatetime;
SELECT @smalldatetime AS '@smalldatetime', @datetime2 AS ' datetime2(4)';
--Result
--@smalldatetime           datetime2(4)
------------------------- ------------------------
--1955-12-13 12:43:00     1955-12-13 12:43:00.0000
--
--(1 row(s) affected)

datetimeoffset(n) veri türü

Aşağıdaki tablo ne olacağı açıklanır, bir datetimeoffset(n) veri türü dönüştürülür diğer tarih ve saat veri türleri.

Veri türüne dönüştürmek için

Dönüştürme ayrıntıları

date

Yıl, ay ve gün kopyalanır.

Aşağıdaki kod gösterir sonuçlar dönüştürme bir datetimeoffset(4) için değer bir date değer.

DECLARE @datetimeoffset datetimeoffset(4);
DECLARE @date date;
SET @datetimeoffset = '12-10-25 12:32:10 +01:0;
SET @date = @datetimeoffset;
SELECT @datetimeoffset AS '@datetimeoffset ', @date AS 'date';
--Result
--@datetimeoffset                date
-------------------------------- ----------
--2025-12-10 12:32:10.0000 +01:0 2025-12-10
--
--(1 row(s) affected)

time(n)

Saat, dakika, ikinci olarak ve Kesirli saniye kopyalanır.Saat dilimi değerini kesirli kısmı atılır.Zaman doğruluğunu datetimeoffset(n) değerdir doğruluğunu büyük time(n) değeri kesiliyor.

Aşağıdaki kod gösterir sonuçlar dönüştürme bir datetimeoffset(4) için değer bir time(3) değer.

DECLARE @datetimeoffset datetimeoffset(4);
DECLARE @time time(3);
SET @datetimeoffset = '12-10-25 12:32:10.1234 +01:0';
SET @time = @datetimeoffset;
SELECT @datetimeoffset AS '@datetimeoffset ', @time AS 'time';
--Result
--@datetimeoffset                time
-------------------------------- ------------
--2025-12-10 12:32:10.1234 +01:0 12:32:10.123
--
--(1 row(s) affected)

datetime

Tarih ve saat değerleri kopyalanır ve saat dilimi kesilmiş.Zaman kesirli duyarlığını datetimeoffset(n) üç basamak büyük değer, değer kesilir.

Aşağıdaki kod gösterir sonuçlar dönüştürme bir datetimeoffset(4) için değer bir datetime değer.

DECLARE @datetimeoffset datetimeoffset(4);
DECLARE @datetime datetime;
SET @datetimeoffset = '12-10-25 12:32:10.1234 +01:0';
SET @datetime = @datetimeoffset;
SELECT @datetimeoffset AS '@datetimeoffset ', @datetime AS 'datetime';
--Result
--@datetimeoffset                datetime
-------------------------------- -----------------------
--2025-12-10 12:32:10.1234 +01:0 2025-12-10 12:32:10.123
--
--(1 row(s) affected)

smalldatetime

Tarih, saat ve dakika kopyalanır.Saniye, 0 olarak küme.

Aşağıdaki kod gösterir sonuçlar dönüştürme bir datetimeoffset(3) için değer bir smalldatetime değer.

DECLARE @datetimeoffset datetimeoffset(3);
DECLARE @smalldatetime smalldatetime;
SET @datetimeoffset = '1912-10-25 12:24:32 +10:0';
SET @smalldatetime = @datetimeoffset;
SELECT @datetimeoffset AS '@datetimeoffset', @smalldatetime AS '@smalldatetime';
--Result
--@datetimeoffset                @smalldatetime
-------------------------------- -----------------------
--1912-10-25 12:24:32.000 +10:00 1912-10-25 12:25:00
--
--(1 row(s) affected)

datetime2(n)

Tarih ve saat kopyalanır datetime2 değeri ve saat dilimini kesiliyor.Zaman doğruluğunu datetime2(n) değerdir doğruluğunu büyük datetimeoffset(n) değeri, kesirli saniye için kesiliyor uyma.

Aşağıdaki kodun gösterdiği sonuçlar dönüştürme bir datetimeoffset(4) için değer bir datetime2(3) değer.

DECLARE @datetimeoffset datetimeoffset(4);
DECLARE @datetime2 datetime2(3);
SET @datetimeoffset = '1912-10-25 12:24:32.1234 +10:0';
SET @datetime2 = @datetimeoffset;
SELECT @datetimeoffset AS '@datetimeoffset', @datetime2 AS '@datetime2';
--Result
--@datetimeoffset                @datetime2
-------------------------------- -----------------------
--1912-10-25 12:24:32.1234 +10:0 1912-10-25 12:24:32.123
--
--(1 row(s) affected)

datetime2 veri türü

Aşağıdaki tablo ne olacağı açıklanır, bir datetime2 veri türü dönüştürülür diğer tarih ve saat veri türleri.

Veri türüne dönüştürmek için

Dönüştürme ayrıntıları

date

Yıl, ay ve gün kopyalanır.

Aşağıdaki kod gösterir sonuçlar dönüştürme bir datetime2(4) için değer bir date değer.

DECLARE @datetime2 datetime2(4;
DECLARE @date date;
SET @datetime2 = '12-10-25 12:32:10.1234';
SET @date = @datetime2;
SELECT @datetime2 AS '@datetime2', @date AS 'date';
--Result
--@datetime2               date
-------------------------- ----------
--2025-12-10 12:32:10.1234 2025-12-10
--
--(1 row(s) affected)

time(n)

Saat, dakika, ikinci olarak ve Kesirli saniye kopyalanır.

Aşağıdaki kod gösterir sonuçlar dönüştürme bir datetime2(4) için değer bir time(3) değer.

DECLARE @datetime2 datetime2(4);
DECLARE @time time(3);
SET @datetime2 = '12-10-25 12:32:10.1234';
SET @time = @datetime2;
SELECT @datetime2 AS '@datetime2', @time AS 'time(3)';
--Result
--@datetime2                time(3) 
-------------------------- ------------
--2025-12-10 12:32:10.1234 12:32:10.123
--
--(1 row(s) affected)

datetime

Tarih ve saat değerleri kopyalanır.Zaman kesirli duyarlığını datetimeoffset(n) üç basamak büyük değer, değer kesilir.

Aşağıdaki kod gösterir sonuçlar dönüştürme bir datetime2 için değer bir datetime değer.

DECLARE @datetime2 datetime;2
DECLARE @datetime datetime;
SET @datetime2 = '12-10-25 12:32:10.1234567;'
SET @datetime = @datetime2;
SELECT @datetime2 AS '@datetime2', @datetime AS '@datetime';
--Result
--@datetime2                  @datetime
----------------------------- -----------------------
--2025-12-10 12:32:10.1234567 2025-12-10 12:32:10.123
--
--(1 row(s) affected)

smalldatetime

Tarih, saat ve dakika kopyalanır.Saniye, 0 olarak küme.

Aşağıdaki kod gösterir sonuçlar dönüştürme bir datetime2 için değer bir smalldatetime değer.

DECLARE @datetime2 datetime2;
DECLARE @smalldatetime smalldatetime;
SET @datetime2 = '12-10-25 12:32:10.1234567';
SET @smalldatetime = @datetime2;
SELECT @datetime2 AS '@datetime2', @smalldatetime AS '@smalldatetime';
--Result
--@datetime2                  @datetime
----------------------------- -----------------------
--2025-12-10 12:32:10.1234567 2025-12-10 12:32:10.123
--
--(1 row(s) affected)

datetimeoffset(n)

The datetime2(n) value is copied to the datetimeoffset(n) value.Saat dilimi uzaklığı kadar + 00: 0 küme.Zaman doğruluğunu datetime2(n) değeri büyük basamak sayısını datetimeoffset(n) değer, değer için kesiliyor uyma.

Aşağıdaki kod gösterir sonuçlar dönüştürme bir datetime2(5) için değer bir datetimeoffset(3) değer.

DECLARE @datetime2 datetime2(3);
DECLARE @datetimeoffset datetimeoffset(2);
SET @datetime2 = '12-10-25 12:32:10.1234567';
SET @datetimeoffset = @datetime2;
SELECT @datetime2 AS '@datetime2', @datetimeoffset AS '@datetimeoffset(2)';
--Result
--@datetime2              @datetimeoffset(2)
------------------------- -----------------------------
--2025-12-10 12:32:10.123 2025-12-10 12:32:10.12 +00:00
--
--(1 row(s) affected)

cast kullanma ve saat, tarih, datetime2 ve datetimeoffset dönüştürme

Bu bölüm, tarih ve saat veri türleri arasında dönüştürme hakkında bilgi sağlar.

Datetimeoffset dönüştürme

  • Her bir datetimeoffset değer saat dilimi ile örtülü bir saat diliminde (örneğin, bir basit atama işlemi) olmayan bir değer ondan türetilmiş için değeri olmadan saat dilimi yerel olarak kabul ve geçerli varsayılan saat dilimi (00: 00) öteleme toplanabilir ver. utc kendisine karşı
  1. utc saat dilimi (00: 00) her zaman non–time bölge veri türleri dönüştürdüğünüzde eklenir datetimeoffset aşağıdaki dönüştürmeleri için:
  • date Kime datetimeoffset

  • time Kime datetimeoffset

  • datetime2 Kime datetimeoffset

  • datetimeor smalldatetime to datetimeoffset

  • Dize geçerli hazır date, time, veya datetime olmadan saat dilimi biçimleri için datetimeoffset

Datetimeoffset'dönüşümü

Dönüştürdüğünüzde dan datetimeoffset aşağıdaki non–time bölge türleri için stil 0 (varsayılan) her zaman gösterir return date, time, datetime2, datetime, veya smalltime değerdir yerel biçimde korunan saat dilimi uzaklığı; ve stil 1 her zaman utc biçimini gösterir.

Bir tarih veya saat değeri olmadan saat dilimi örtülü olarak aşağıdaki dönüştürmeleri birini elde edilen her datetimeoffset utc olarak değer kabulYerel saat vermek için değer korunan saat dilimi öteleme eklenir.Herhangi bir saat dilimi uzaklığı olmadan sonucu yerel saattir.

  • datetimeoffset Kime date

  • datetimeoffset Kime time

  • datetimeoffset Kime datetime2

  • datetimeoffsetto datetime or smalldatetime

  • 0 Ve 1 stilleri kullanılamaz datetimeoffset Dize dönüştürme.Bunun yerine, önce dönüştürme datetimeoffset için datetime2 veya datetimeveiçin varchar veya char.

Varolan bir convert stili saat bölümünü içeriyorsa ve dönüştürme olduğunu datetimeoffset dize için saat dilimi uzaklığı (dışında stil için 127) bulunur.Saat dilimi uzaklığı istemiyorsanız için ÇEVİREBİLİRSİNİZ datetime2 ilk ve sonra dize.

Tüm varolan tarih ve saat stilleri için uygulanacak datetimeoffset Dize dönüştürme ve saat dilimi uzaklığı korunur.

Giriş dize saat dilimi mahsup bölümü olması gereken her zaman çift basamak ss ve mm hem oturum ya da + veya – zorunludur.

Dönüştürme bırakılan bilgi

  • Dönüştürdüğünüzde dan datetime2 veya datetimeoffset için date, var olan yuvarlama ve tarih bölümünü açıkça ayıklanır.İçin datetimeoffset, ayıklama işlemi gerçekleştirildiğinde üzerinde yerel tarih ve saat ancak utc değeri.

  • Tüm örtük dönüştürme işlemi için datetimeoffset için date, time, datetime2, datetime, veya smalldatetime, dönüşümü esas yerel tarih ve saat değerine (kalıcı saat dilimi uzaklığı).Örneğin, ne zaman datetimeoffset(3), değer, 2006-10-21 12:20:20.999 -8: 00, dönüştürülür time(3), sonucu 12:20:20.999 20:20:20.999(utc).

Dönüştürmede kesilmesi

  • Yüksek duyarlıklı saat değerleri türünden daha düşük duyarlılık değerlerine izin verilir.Daha yüksek kesinlik değerleri için kesilecek uyma daha düşük duyarlılık türü.

Kesirli saniye dönüştürme

Bir stili saat biçimi SS:dd:ss.mmm içeriyorsa, biçimi hh:mm:ss. [nnnnnnn] için olacak time(n), datetime2(n) ve datetimeoffset(n).Basamak sayısı türü belirtimine bağlıdır.Yalnızca milisaniyelik precision istiyorsanız dönüştürmek datetime2(3) önce ve sonra dize.

Stiller için 9, 109, 13, 113, 21, 121, 130 ve 131, iki nokta üst üste (:) Kesirli saniye önceki ayırıcı desteklenmez time, datetime2 ve datetimeoffset türleri için dize dönüştürme.Çıktı dize bir nokta (.) bu stilleri ile biçimi dönüştürülmüş.

DÖNÜŞTÜRME işlevi için stili değişkenleri

Aşağıdaki tablo örnekleri listeler date, time, datetime2, ve datetimeoffset için dönüştürme işlev stili bağımsız değişkenlerin değerleri"Arguments" stili hakkında daha fazla bilgi için bkz: bölümü CAST ve CONVERT (Transact-SQL)

Stil

Associated standard

Input/Output (3)

format

date

time(n)

datetime2(n)

datetimeoffset(n)

0 or 100 (1,2)

Default

Pzt gg yyyy hh:miAM (veya pm)

Oca12001

12:20 PM

1 Oca 2001 12:20 pm

1 Oca 2001 12:20 pm-08: 00

101

ABD

AA.GG.YYYY

01/01/2001

-

01/01/2001

01/01/2001

102

ANSI

yy.mm.dd

2001.01.01

-

2001.01.01

2001.01.01

103

İngiliz/Fransızca

aa/gg/yy

01/01/2001

-

01/01/2001

01/01/2001

104

Almanca

GG.aa.yy

01.01.2001

-

01.01.2001

01.01.2001

105

İtalyanca

gg-aa-yy

01-01-2001

-

01-01-2001

01-01-2001

106(1)

-

GG mon yy

01 Oca 2001

-

01 Oca 2001

01 Oca 2001

107(1)

-

Pzt dd yy

01 Oca 2001

-

01 Oca 2001

01 Oca 2001

108

-

hh:mi:ss

-

12:20:20

12:20:20

12:20:20

9 or 109 (1,2)

Varsayılan + milisaniye

Pzt gg yyyy hh:mi:ss:mmmAM (veya pm)

Oca12001

12:20:20.1234567 AM

1 Oca 2001 12:20:20.1234567 pm

1 Oca 2001 12:20:20:1230000 pm-08: 00

110

ABD

gg-aa-yy

01-01-2001

-

01-01-2001

01-01-2001

111

JAPONYA

yy/aa/gg

2001/01/01

-

2001/01/01

2001/01/01

112

ISO

YYAAGG

20010101

-

20010101

20010101

13 or 113 (1,2)

Avrupa varsayılan + milisaniye

GG mon yyyy hh:mi:ss:mmm(24h)

01 Oca 2001

12:20:20.1234567

01 Oca 2001 12:20:20.1234567

01 Oca 2001 12:20:20:1230000-08: 00

114

-

hh:mi:ss:mmm(24h)

-

12:20:20.1234567

12:20:20.1234567

12:20:20:1230000 -08:00

20 or 120 (2)

odbc kurallı

yyyy-aa-gg hh:mi:ss(24h)

2001-01-01

12:20:20

2001-01-01 12:20:20

2001-01-01 12:20:20 -08:00

21 or 121 (2)

odbc kurallı (milisaniye ile)

yyyy-aa-gg hh:mi:ss.mmm(24h)

2001-01-01

12:20:20.1234567

2001-01-01 12:20:20.1234567

2001-01-01 12:20:20.1230000 -08:00

126 (4)

ISO8601

yyyy-aa-ddThh:mi:ss.mmm (boşluksuz)

2001-01-01

12:20:20.1234567

2001-01-01T 12:20:20.1234567

2001-01-01T 12:20:20.1234567

127(6, 7)

z saat dilimi ile ISO8601.

yyyy-aa-ddThh:mi:ss.mmmZ

(boşluksuz)

2001-01-01

12:20:20.1234567Z

2001-01-01T 12:20:20.1234567Z

2001-01-01T20:20:20.1230000Z

130 (1,2)

Hijri (5)

GG mon yyyy hh:mi:ss:mmmAM

01 Oca 2001

12:20:20.1230000 PM

01 Oca 2001 12:20:20.1230000 pm

1 Oca 2001 12:20:20:1230000 pm-08: 00

131 (2)

Hijri (5)

aa/gg/yy hh:mi:ss:mmmAM

01/01/2001

12:20:20.1230000 PM

01/01/2001 12:20:20.1230000 PM

01/01/2001 12:20:20.1230000 PM-08: 00

1 Bu stil değerleri Belirleyici olmayan sonuçlar döndürebilir.(Yüzyıl) olmadan tüm (yy) içeren stiller ve alt küme küme kümesini (yyyy) (yüzyıl ile) stilleri.

2 The default values (style0 or 100, 9 or 109, 13 or 113, 20 or 120, and 21 or 121) always return the century (yyyy).

3 İçin dönüştürdüğünüzde giriş datetime; karakter verileri dönüştürürken çıktı.

4 xml kullanım için tasarlanmıştır.Dönüştürme işlemi için datetime veya smalldatetime karakter veri için çıktı biçimi önceki tablo. açıklandığı gibi

5 Hijri is a calendar system with several variations.SQL Server uses the Kuwaiti algorithm.

6 Dan karakter verileri vuran, yalnızca desteklenen datetime veya smalldatetime.İçin yalnızca temsil eden karakter veri tarih veya bileşenleri yalnızca zaman artığını datetime veya smalldatetime veri türleri, belirsiz saat bileşeni 00:00:00.000 için küme ve 1900-01-01 belirtilmeyen tarih bileşeni küme.

7The optional time zone indicator, Z, is used to make it easier to map XML datetime values that have time zone information to SQL Server datetime values that have no time zone.Z saat dilimi: utc-0 için göstergesidir.

sql Server tarih ve saat sınırlamaları

Aşağıdaki listede tarih ve saat, tarih veya saat bölümü içeren herhangi bir tarih ve saat veri türü için başvurun.

  • Hiçbir sunucu tarafı ışığından saat (dst) desteğini datetimeoffset.

  • tarih Jülyen takvimi desteklemez.

  • '24' Ün hiçbir saat destek gece yarısı saat gösterimi.

  • Hiçbir saat Destek 'artık saniye' üzerinde '59' desteği.

  • 'Bir nanosecond' ın hiçbir saat destek veya kesirli ikinci duyarlık için daha büyük.

  • Saat için saat dilimi desteği yok.

  • sql standart ARALIĞI işlem desteği yok.

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

Bazı kapalı-düzey istemcilere destektime, date, datetime2 ve datetimeoffset veri türleri eklendi SQL Server 2008.kapalıdaki tablo türü eşlemesi arasındaki üst düzey bir örneğini gösterir SQL Server 2008 ve kapalı düzey istemciler.

sql Server 2008 veri türü

Varsayılan dize hazır bilgi biçimi geçirilen kapalı-düzey istemcisi

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_WSTRor dbtype_str

Java.SQL.String

Dize veya SqString

date

YYYY-AA-GG

sql_wvarchar veya sql_varchar

DBTYPE_WSTRor dbtype_str

Java.SQL.String

Dize veya SqString

datetime2

YYYY-MM-DD hh:mm:ss[.nnnnnnn]

sql_wvarchar veya sql_varchar

DBTYPE_WSTRor dbtype_str

Java.SQL.String

Dize veya SqString

datetimeoffset

YYYY-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mm

sql_wvarchar veya sql_varchar

DBTYPE_WSTRor dbtype_str

Java.SQL.String

Dize veya SqString

Örnekler

A.Tarih ve saat veri türlerini karşılaştırma

Aşağıdaki örnek karşılaştırır sonuçlar her tarih ve saat veri türü için düz bir dize vuran biri.Çalışırken CAST bir dize ile Kesirli saniye duyarlık için izin verilen en çok olduğu smalldatetime veya datetime yükseltmek bir hata.

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';

Veri türü

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(7)

2007-05-08 12:35:29.1234567

datetimeoffset(7)

2007-05-08 12:35:29.1234567 +12:15

B.Geçerli sistem tarihni alma vesaat

Aşağıdaki örnek, nasıl kullanılacağını gösterir SQL Server Geçerli tarihi döndüren sistem işlevleri ve saat.

SELECT SYSDATETIME() AS 'SYSDATETIME'

--Results
--SYSDATETIME
--2007-10-22 14:10:41.7984554
--(1 row(s) affected)

SELECT SYSDATETIMEOFFSET() AS 'SYSDATETIMEOFFSET'

--Results
--SYSDATETIMEOFFSET
--2007-10-22 14:11:34.2607172 -0
--(1 row(s) affected)

SELECT SYSUTCDATETIME() AS 'SYSUTCDATETIME'

--Results
--SYSUTCDATETIME
--2007-10-22 21:12:11.7069470
--(1 row(s) affected)

SELECT CURRENT_TIMESTAMP AS 'CURRENT_TIMESTAMP'

--Results
--CURRENT_TIMESTAMP
-------------------------
--2007-10-22 14:12:33.320
--(1 row(s) affected)

SELECT GETDATE() AS 'GETDATE'

--Results
--GETDATE
--2007-10-22 14:13:57.943
--(1 row(s) affected)

SELECT GETUTCDATE() AS 'GETUTCDATE'

--Results
--GETUTCDATE
--2007-10-22 21:14:35.657
--(1 row(s) affected)

C.Bir günde tüm datetime2 değerleri arama

  • Aşağıdaki örnek, bir günde tüm tarih ve saat değerleri aramak nasıl gösterir.
-- Create a table that contains with the following dates:
--     The last date-time in 2005-04-06, '2005-04-06 23:59:59.9999999'
--     The first date-time in 2005-04-07, '2005-04-07 00:00:00.0000000'
--     The last date-time in 2005-04-07, '2005-04-07 23:59:59.9999999'
--     The first date-time in 2005-04-08, '2005-04-08 00:00:00.0000000'
CREATE TABLE #Search
    (
    MyDate datetime2
    );
INSERT INTO #Search(MyDate)VALUES('2005-04-06 23:59:59.9999999');
INSERT INTO #Search(MyDate)VALUES('2005-04-07 00:00:00.0000000');
INSERT INTO #Search(MyDate)VALUES('2005-04-07 23:59:59.9999999');
INSERT INTO #Search(MyDate)VALUES('2005-04-08 00:00:00.0000000');

-- The following four SELECT statements show different ways to find
-- only the two rows that contain 2005-04-07 dates.
--Use CONVERT.
SELECT MyDate 
FROM #Search 
WHERE CONVERT(date,MyDate) = '2005-04-07';

--Use >= and <=.
SELECT MyDate 
FROM #Search 
WHERE MyDate >= '2005-04-07 00:00:00.0000000' 
    AND MyDate <= '2005-04-07 23:59:59.9999999';

--Use > and <.
SELECT MyDate
FROM #Search
WHERE MyDate > '2005-04-06 23:59:59.9999999'
    AND MyDate < '2005-04-08 00:00:00.0000000';

--Use BETWEEN AND.
SELECT MyDate
FROM #Search
WHERE MyDate BETWEEN '2005-04-07 00:00:00.0000000'
    AND '2005-04-07 23:59:59.9999999';
DROP TABLE #Search
GO

D.Bir gün içinde saat için arama

Aşağıdaki örnekler, bir saat aralık bulmak için saat değerleri tarihlerde arama hakkında

-- Create a table called Search and insert
-- five different time values for the same
-- date.

CREATE TABLE #Search
    (
    MyDate datetime2
    );

INSERT INTO #Search(MyDate)VALUES('2005-04-06 08:59:59.9999999');
INSERT INTO #Search(MyDate)VALUES('2005-04-06 09:00:00.0000000');
INSERT INTO #Search(MyDate)VALUES('2005-04-06 09:00:00.9999999');
INSERT INTO #Search(MyDate)VALUES('2005-04-06 16:59:59.9999999');
INSERT INTO #Search(MyDate)VALUES('2005-04-06 17:00:00.0000000');

-- The following SELECT statements show different ways
-- to search for dates that have time values to find a
-- time range.

--Using CONVERT with time (0) to ignore fractional seconds
SELECT MyDate 
FROM #Search 
WHERE CONVERT(time(0),MyDate) = '09:00:00';

--Returns two rows (ignores fractional seconds):
--2005-04-06 08:59:59.9999999
--2005-04-06 09:00:00.0000000

--Using CONVERT with time (7) to include fractional seconds
SELECT MyDate 
FROM #Search 
WHERE CONVERT(time(7),MyDate) = '09:00:00';

--Returns one row (matches fractional seconds):
--2005-04-06 09:00:00.0000000


--Each of the SELECT statements below use CONVERT
--to find all times in an eight-hour period.

--Use CONVERT with >= and <=.
SELECT MyDate 
FROM #Search 
WHERE CONVERT(time(7),MyDate) >=  '09:00:00.0000000'
    AND CONVERT(time(7),MyDate) <= '16:59:59.9999999'

--Use CONVERT with > and <.
SELECT MyDate
FROM #Search
WHERE CONVERT(time(7),MyDate) > '08:59:59.9999999'
    AND CONVERT(time(7),MyDate) < '17:00:00.0000000';

--Use CONVERT with BETWEEN AND
SELECT MyDate
FROM #Search
WHERE CONVERT(time(7),MyDate) BETWEEN '09:00:00.0000000'
    AND '16:59:59.9999999';
DROP TABLE #Search
GO

E.Bir datepart ilk ve son günleri bulmak için datepart ve dateadd kullanma

Aşağıdaki örnekte ilk veya son gününü dönmek nasıl gösterir bir datepart.

-- When several months, quarters, or years are added to the base
-- year,1900-01-01, the returned day is the first day of a month.
-- To calculate the last day of the current month, you need to
--
-- 1. Find the difference in months between today and the base
--    year (0 ='1900-01-01'). This is accomplished by
--
-- DATEDIFF(month, 0, SYSDATETIME())
-- 2. Add that number of months plus 1 to the base year (0)
--    to obtain the first day of the next month.
--    DATEADD(month, DATEDIFF(month, 0, SYSDATETIME()) + 1, 0)
-- 3. Subtract 1 day.
--
--Find the first day of the current month.
SELECT DATEADD(month, DATEDIFF(month, 0, SYSDATETIME()), 0);

--Find the last day of the current month.
SELECT DATEADD(month, DATEDIFF(month, 0, SYSDATETIME()) + 1, 0) - 1;

-- Find the first day of the current quarter.
SELECT DATEADD(quarter, DATEDIFF(quarter, 0, SYSDATETIME()), 0);

-- Find the last day of the current quarter.
SELECT DATEADD(quarter, DATEDIFF(quarter, -1, SYSDATETIME()), -1);

-- Find the first day of the current year.
SELECT DATEADD(year, DATEDIFF(year, 0, SYSDATETIME()), 0);

-- Find the last day of the current year.
SELECT DATEADD(year, DATEDIFF(year, -1, SYSDATETIME()), -1);

F.dateadd, DATEDIFF, datename ve datepart datepart kullanıcı tanımlı değişkenleri kullanma

Aşağıdaki örnek, herhangi bir bölümü için bir sabit değer ekleyen skaler kullanıcı tanımlı bir işlev oluşturur bir datetime2 değer.

USE tempdb
GO
CREATE FUNCTION UserDateadd
    (
    @datepart nvarchar(11)
    ,@number int 
    ,@date datetime2
    )
RETURNS datetime2
AS
BEGIN
    DECLARE @Return datetime2

    SELECT @Return = CASE @datepart
        WHEN 'year' THEN DATEADD(year,@number,@date) 
        WHEN 'yy' THEN DATEADD(year,@number,@date) 
        WHEN 'yyyy' THEN DATEADD(year,@number,@date) 
        WHEN 'quarter' THEN DATEADD(quarter,@number,@date) 
        WHEN 'qq' THEN DATEADD(quarter,@number,@date) 
        WHEN 'month' THEN DATEADD(month,@number,@date) 
        WHEN 'mm' THEN DATEADD(month,@number,@date) 
        WHEN 'm' THEN DATEADD(month,@number,@date) 
        WHEN 'dayofyear' THEN DATEADD(dayofyear,@number,@date) 
        WHEN 'dy' THEN DATEADD(dayofyear,@number,@date) 
        WHEN 'y' THEN DATEADD(dayofyear,@number,@date) 
        WHEN 'day' THEN DATEADD(day,@number,@date) 
        WHEN 'dd' THEN DATEADD(day,@number,@date) 
        WHEN 'd' THEN DATEADD(day,@number,@date) 
        WHEN 'week' THEN DATEADD(week,@number,@date) 
        WHEN 'wk' THEN DATEADD(week,@number,@date) 
        WHEN 'ww' THEN DATEADD(week,@number,@date) 
        WHEN 'weekday' THEN DATEADD(weekday,@number,@date) 
        WHEN 'wk' THEN DATEADD(weekday,@number,@date) 
        WHEN 'w' THEN DATEADD(weekday,@number,@date) 
        WHEN 'hour' THEN DATEADD(hour,@number,@date) 
        WHEN 'hh' THEN DATEADD(hour,@number,@date) 
        WHEN 'minute' THEN DATEADD(minute,@number,@date)
        WHEN 'mi' THEN DATEADD(minute,@number,@date) 
        WHEN 'n' THEN DATEADD(minute,@number,@date)  
        WHEN 'second' THEN DATEADD(second,@number,@date) 
        WHEN 'ss' THEN DATEADD(second,@number,@date)
        WHEN 's' THEN DATEADD(second,@number,@date)
        WHEN 'millisecond' THEN DATEADD(millisecond,@number,@date) 
        WHEN 'ms' THEN DATEADD(millisecond,@number,@date) 
        WHEN 'microsecond' THEN DATEADD(microsecond,@number,@date)
        WHEN 'mcs' THEN DATEADD(microsecond,@number,@date)
        WHEN 'nanosecond' THEN DATEADD(nanosecond,@number,@date)
        WHEN 'ns' THEN DATEADD(nanosecond,@number,@date)
    END
    return @Return
END
GO

SELECT GetDate()
SELECT dbo.UserDateadd('year', 1, GetDate())
GO

G.Kullanarak tarihgrubuna bir bölümü bölümleri tarafından birtarih

Aşağıdaki örnek AdventureWorks2008R2 örnek veritabanı.The DATEPART is used to group total sales by weekday, month, year, and year/month/weekday.

USE AdventureWorks2008R2;
GO
SELECT SUM(TotalDue) AS 'Total Sales'
    ,DATEPART(year,OrderDate)AS 'By Year'
    ,DATEPART(month,OrderDate) AS 'By Month'
    ,DATEPART(weekday,OrderDate) AS 'By Weekday'
FROM Sales.SalesOrderHeader
WHERE YEAR(OrderDate) IN('2007','2008')
GROUP BY GROUPING SETS 
    (
     (DATEPART(year,OrderDate))
    ,(DATEPART(month,OrderDate))
    ,(DATEPART(weekday,OrderDate))
    ,(
        DATEPART(year,OrderDate)
        ,DATEPART(month,OrderDate)
        ,DATEPART(weekday,OrderDate))
    )
ORDER BY DATEPART(year,OrderDate)
    ,DATEPART(month,OrderDate)
    ,DATEPART(weekday,OrderDate);