Dátum- és időadatok

Az SQL Server 2008 új adattípusokat vezetett be a dátum- és időadatok kezeléséhez. Az új adattípusok különböző dátum- és időtípusokat, valamint nagyobb tartományt, pontosságot és időzóna-tudatosságot tartalmazó kibővített adattípusokat tartalmaznak. A .NET-keretrendszer 3.5-ös szervizcsomag (SP) 1-es verziójától kezdve az SQL Server .NET-keretrendszer adatszolgáltatója (System.Data.SqlClient) teljes körű támogatást nyújt az SQL Server 2008 adatbázismotor összes új funkciójának. A .NET-keretrendszer 3.5 SP1 -et (vagy újabb verziót) telepítenie kell az új funkciók SqlClienttel való használatához.

Az SQL Server 2008-nál korábbi verzióinak csak két adattípusa volt a dátum- és időértékek kezeléséhez: datetime és smalldatetime. Mindkét adattípus tartalmazza a dátumértéket és az időértéket is, ami megnehezíti a csak dátum- vagy csak időértékekkel való munkát. Emellett ezek az adattípusok csak azokat a dátumokat támogatják, amelyek a Gergely-naptár 1753-ban angliai bevezetése után következnek be. Egy másik korlátozás, hogy ezek a régebbi adattípusok nem érzékelik az időzónát, ami megnehezíti a különböző időzónából származó adatok kezelését.

Az SQL Server dátum- és időtípusairól további információt a Dátum és idő adattípusok és függvények című témakörben talál.

Az SQL Server 2008-ban bevezetett dátum-idő adattípusok

Az alábbi táblázat az új dátum- és időadattípusokat ismerteti.

SQL Server-adattípus Leírás
date Az date adattípus tartománya 9999. január 1. és 9999. december 31. között 1 napos pontosságú. Az alapértelmezett érték 1900. január 1. A tárterület mérete 3 bájt.
time Az time adattípus csak az időértékeket tárolja egy 24 órás óra alapján. Az time adattípus tartománya 00:00:00.0000000 és 23:59:59.9999999999 közötti, 100 nanoszekundum pontosságú. Az alapértelmezett érték 00:00:00.0000000 (éjfél). Az time adattípus támogatja a felhasználó által definiált tört másodperces pontosságot, a tárterület mérete pedig a megadott pontosságtól függően 3 és 6 bájt között változik.
datetime2 Az datetime2 adattípus egyetlen adattípusba ötvözi a date és time adattípusok tartományát és pontosságát.

Az alapértelmezett értékek és a sztring-literál formátumok megegyeznek az date és time adattípusokban meghatározottakkal.
datetimeoffset Az datetimeoffset adattípus rendelkezik a további időzóna-eltolás összes funkciójával datetime2 . Az időzóna eltolását így jelöljük: [+|-] HH:MM. A HH 2 számjegy 00 és 14 között, amelyek az időzóna-eltolásban lévő órák számát jelölik. Az MM 2 számjegy 00 és 59 között, amelyek az időzóna-eltolás további perceinek számát jelölik. Az időformátumok 100 nanoszekundumig támogatottak. A kötelező + vagy - jel azt jelzi, hogy az időzóna eltolása hozzáadva vagy kivonva van-e az UTC -ből (univerzális időkoordináta vagy Greenwich középidő) a helyi idő lekéréséhez.

Megjegyzés

A kulcsszó használatával kapcsolatos további információkért Type System Version lásd: ConnectionString.

Dátumformátum és dátumsorrend

Az SQL Server dátum- és időértékeinek elemzése nem csak a típusrendszer verziójától és a kiszolgáló verziójától függ, hanem a kiszolgáló alapértelmezett nyelv- és formátumbeállításaitól is. Az egyik nyelv dátumformátumaihoz használható dátumsztring felismerhetetlen lehet, ha a lekérdezést egy másik nyelvet és dátumformátumot használó kapcsolat hajtja végre.

A Transact-SQL SET LANGUAGE utasítás implicit módon beállítja a dátumrészek sorrendjét meghatározó DATEFORMAT értéket. A SET DATEFORMAT Transact-SQL utasítással egy kapcsolaton egyértelműsítheti a dátumértékeket az MDY, DMY, YMD, YDM, MYD vagy DYM sorrendben.

Ha nem ad meg dátumformát a kapcsolathoz, az SQL Server a kapcsolathoz társított alapértelmezett nyelvet használja. A "01/02/03" dátumsztringet például MDY-ként (2003. január 2.) értelmezi a rendszer egy olyan kiszolgálón, amelyen Egyesült Államok angol nyelvi beállítás van beállítva, és DMY-ként (2003. február 1.) egy angol nyelvű beállítású kiszolgálón. Az évet az SQL Server határév szabálya határozza meg, amely meghatározza az évszázad értékének hozzárendelésének határidejét. További információkért lásd a kétjegyű év határának beállítási lehetősége.

Megjegyzés

Az YDM dátumformátuma nem támogatott, ha sztringformátumból date, time, datetime2, vagy datetimeoffset.

További információ arról, hogy az SQL Server hogyan értelmezi a dátum- és időadatokat: Dátum- és időadatok használata.

Dátum/idő adattípusok és paraméterek

Az új dátum- és időadattípusok támogatásához SqlDbType a következő enumerációk lettek hozzáadva.

  • SqlDbType.Date

  • SqlDbType.Time

  • SqlDbType.DateTime2

  • SqlDbType.DateTimeOffSet

Az adattípust SqlParameter az előző SqlDbType enumerációk egyikével adhatja meg.

Megjegyzés

Nem állíthatod be a DbType tulajdonságát egy SqlParameter elemnél SqlDbType.Date értékre.

Egy SqlParameter típusát úgy is megadhatja, hogy a DbType objektum egy tulajdonságát egy adott SqlParameter enumerálási értékre állítja. A következő enumerálási értékek lettek hozzáadva a DbType elemhez, hogy támogassák a datetime2 és datetimeoffset adattípusokat.

  • DbType.DateTime2

  • DbType.DateTimeOffset

Ezek az új enumerálások kiegészítik a Date.NET-keretrendszer korábbi verzióiban létező , Timeés DateTime enumerálásokat.

Egy paraméterobjektum .NET-keretrendszer adatszolgáltatójának típusa a paraméterobjektum értékének .NET-keretrendszer típusából vagy a DbType paraméterobjektumból származik. Nem jelentek meg új System.Data.SqlTypes adattípusok az új dátum- és időadattípusok támogatásához. Az alábbi táblázat az SQL Server 2008 dátum- és időadattípusai és a CLR-adattípusok közötti leképezéseket ismerteti.

SQL Server-adattípus .NET-keretrendszer típusa System.Data.SqlDbType System.Data.DbType
dátum: System.DateTime Dátum Dátum
Idő System.TimeSpan Idő Idő
datetime2 System.DateTime DateTime2 DateTime2
dátum-idő eltolás System.DateTimeOffset IdőpontEltérés (DateTimeOffset) IdőpontEltérés (DateTimeOffset)
datetime System.DateTime Dátum/idő Dátum/idő
smalldatetime System.DateTime Dátum/idő Dátum/idő

SqlParameter tulajdonságai

Az alábbi táblázat a dátum- és időadattípusok szempontjából releváns tulajdonságokat ismerteti SqlParameter .

Tulajdonság Leírás
IsNullable Lekérdezi vagy beállítja, hogy egy érték null értékű-e. Amikor null paraméterértéket küld a kiszolgálónak, meg kell adnia a DBNull-t, nem pedig a null-t (Nothing a Visual Basicben). Az adatbázis null értékeivel kapcsolatos további információkért lásd : Null értékek kezelése.
Precision Lekéri vagy beállítja az érték megjelenítéséhez használt számjegyek maximális számát. Ezt a beállítást a rendszer figyelmen kívül hagyja a dátum- és időadatok esetében.
Scale Lekéri vagy beállítja azoknak a tizedesjegyeknek a számát, amelyekre az érték időrésze van kerekítve Time, DateTime2, és DateTimeOffset esetében. Az alapértelmezett érték 0, ami azt jelenti, hogy a tényleges skálázás az értékből következtethető, és a kiszolgálóra kerül elküldésre.
Size A dátum- és időadattípusokat figyelmen kívül hagyja.
Value Lekéri vagy beállítja a paraméter értékét.
SqlValue Lekéri vagy beállítja a paraméter értékét.

Megjegyzés

A nullánál kisebb vagy 24 óránál hosszabb vagy egyenlő időértékek egy ArgumentException-t dobnak.

Paraméterek létrehozása

Létrehozhat egy objektumot SqlParameter a konstruktorával, vagy hozzáadhatja egy SqlCommandParameters gyűjteményhez a AddSqlParameterCollectionmetódus meghívásával. A Add metódus bemenetként konstruktorargumentumokat vagy egy meglévő paraméterobjektumot fog használni.

A témakör következő szakaszai példákat mutatnak be a dátum- és időparaméterek megadására. További példák a paraméterek használatára: Paraméterek és paraméteradattípusokés DataAdapter-paraméterek konfigurálása.

Példa dátumra

Az alábbi kódrészlet bemutatja, hogyan adható meg paraméter date .

SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@Date";
parameter.SqlDbType = SqlDbType.Date;
parameter.Value = "2007/12/1";
Dim parameter As New SqlParameter()
parameter.ParameterName = "@Date"
parameter.SqlDbType = SqlDbType.Date
parameter.Value = "2007/12/1"

Az idő példája

Az alábbi kódrészlet bemutatja, hogyan adható meg paraméter time .

SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@time";
parameter.SqlDbType = SqlDbType.Time;
parameter.Value = DateTime.Parse("23:59:59").TimeOfDay;
Dim parameter As New SqlParameter()
parameter.ParameterName = "@Time"
parameter.SqlDbType = SqlDbType.Time
parameter.Value = DateTime.Parse("23:59:59").TimeOfDay;

Datetime2 példa

Az alábbi kódrészlet bemutatja, hogyan adhat meg paramétert datetime2 a dátum- és időrészekkel együtt.

SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@Datetime2";
parameter.SqlDbType = SqlDbType.DateTime2;
parameter.Value = DateTime.Parse("1666-09-02 1:00:00");
Dim parameter As New SqlParameter()
parameter.ParameterName = "@Datetime2"
parameter.SqlDbType = SqlDbType.DateTime2
parameter.Value = DateTime.Parse("1666-09-02 1:00:00");

DateTimeOffSet példa

Az alábbi kódrészlet bemutatja, hogyan adhat meg egy paramétert DateTimeOffSet dátummal, időponttal és 0 időzóna-eltolással.

SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@DateTimeOffSet";
parameter.SqlDbType = SqlDbType.DateTimeOffSet;
parameter.Value = DateTimeOffset.Parse("1666-09-02 1:00:00+0");
Dim parameter As New SqlParameter()
parameter.ParameterName = "@DateTimeOffSet"
parameter.SqlDbType = SqlDbType.DateTimeOffSet
parameter.Value = DateTimeOffset.Parse("1666-09-02 1:00:00+0");

AddWithValue

Paramétereket is megadhat egy AddWithValue metódussal SqlCommand, ahogy az az alábbi kódtöredékben látható. A AddWithValue metódus azonban nem teszi lehetővé a DbType vagy a SqlDbType paraméterek megadását.

command.Parameters.AddWithValue(
    "@date", DateTimeOffset.Parse("16660902"));
command.Parameters.AddWithValue( _
    "@date", DateTimeOffset.Parse("16660902"))

A @date paraméter megfeleltethető egy date, datetimevagy datetime2 adattípusnak a kiszolgálón. Az új datetime adattípusok használatakor explicit módon be kell állítania a paraméter tulajdonságát SqlDbType a példány adattípusára. A Variant vagy paraméterértékek implicit megadása problémákat okozhat a visszamenőleges kompatibilitás szempontjából a datetime és smalldatetime adattípusokkal.

Az alábbi táblázat azt mutatja be, hogy mely SqlDbTypes CLR-típusokból következtetnek a következőkre:

CLR-típus Automatikusan kikövetkeztetett SqlDbType
Dátum/idő SqlDbType.DateTime
időtartam SqlDbType.Time
IdőpontEltérés (DateTimeOffset) SqlDbType.DateTimeOffset

Dátum- és időadatok beolvasása

Az alábbi táblázat az SQL Server 2008 dátum- és időértékeinek lekérésére használt módszereket ismerteti.

SqlClient metódus Leírás
GetDateTime Lekéri a megadott oszlop értékét DateTime struktúraként.
GetDateTimeOffset Lekéri a megadott oszlop értékét DateTimeOffset struktúraként.
GetProviderSpecificFieldType Azt a típust adja vissza, amely a mező mögöttes szolgáltatóspecifikus típusa. Ugyanazokat a típusokat adja vissza, mint GetFieldType az új dátum- és időtípusok esetében.
GetProviderSpecificValue A megadott oszlop értékét kéri le. Ugyanazokat a típusokat adja vissza, mint GetValue az új dátum- és időtípusok esetében.
GetProviderSpecificValues Lekéri a megadott tömb értékeit.
GetSqlString Lekéri az oszlop értékét SqlString. Ez InvalidCastException akkor fordul elő, ha az adatok nem fejezhetők ki SqlString.
GetSqlValue Az oszlopadatokat az alapértelmezett SqlDbTypeértékként kéri le. Ugyanazokat a típusokat adja vissza, mint GetValue az új dátum- és időtípusok esetében.
GetSqlValues Lekéri a megadott tömb értékeit.
GetString Az oszlop értékét sztringként kéri le, ha a típusrendszer verziója SQL Server 2005-re van állítva. Ez InvalidCastException akkor fordul elő, ha az adatok nem fejezhetők ki sztringként.
GetTimeSpan Lekéri a megadott oszlop értékét TimeSpan struktúraként.
GetValue Lekéri a megadott oszlopértéket annak CLR-típusa szerint.
GetValues Egy tömb oszlopértékeit kéri le.
GetSchemaTable DataTable Az eredményhalmaz metaadatait leíró értéket ad vissza.

Megjegyzés

Az SQL Serveren folyamatban lévő kód esetében az új dátum és idő SqlDbTypes nem támogatott. Kivétel akkor lép fel, ha az egyik ilyen típust átadja a kiszolgálónak.

Dátum- és időértékek megadása literálként

A dátum- és időadattípusokat különböző literális sztringformátumok használatával adhatja meg, amelyeket az SQL Server futásidőben kiértékel, és belső dátum/idő struktúrákká alakítja őket. Az SQL Server felismeri az egyszeri idézőjelek közé (') zárt dátum- és időadatokat. Az alábbi példák néhány formátumot mutatnak be:

  • Betűrendes dátumformátumok, például 'October 15, 2006'.

  • Numerikus dátumformátumok, például '10/15/2006'.

  • A szét nem választott sztringformátumok, mint például a '20061015', az ISO-szabvány dátumformátum használata esetén 2006. október 15-ként lesz értelmezve.

A nullánál kisebb vagy 24 óránál hosszabb vagy egyenlő időértékek egy ArgumentException-t dobnak.

SQL Server-dokumentumok erőforrásai

Az SQL Server dátum- és időértékeivel kapcsolatos további információkért tekintse meg az alábbi cikkeket.

Cikk Leírás
Dátum és idő adattípusok és függvények (Transact-SQL) Áttekintést nyújt az összes Transact-SQL dátum- és időadattípusról és -függvényről.
Dátum- és időadatok használata Információt nyújt a dátum- és időadattípusokról és függvényekről, valamint példákat a használatukra.
Adattípusok (Transact-SQL) Az SQL Server rendszeradat-típusait ismerteti.

Lásd még