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
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ı
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ı.
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.
İç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.
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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ü.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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şı
- 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);
Ayrıca bkz.