Megosztás:


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 időzóna-tudatában vannak, ami megnehezíti a több időzónából származó adatokkal való munká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 egyesíti az adattípusok tartományát date és time pontosságát.

Az alapértelmezett értékek és a sztringkonstansformátumok megegyeznek az date adattípusokban definiált time értékekkel.
datetimeoffset Az datetimeoffset adattípus rendelkezik a további időzóna-eltolás összes funkciójával datetime2 . Az időzóna eltolása [+|-] 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.

Feljegyzé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 leépítési évszabálya határozza meg, amely meghatározza az évszázad értékének hozzárendelésének kezdő dátumát. További információkért lásd a kétjegyű év kivágási lehetőségét.

Feljegyzés

Az YDM dátumformátuma nem támogatott, ha sztringformátumból date, , timedatetime2vagy 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.

Feljegyzés

Az a DbType tulajdonság nem állítható be SqlParameter a következőreSqlDbType.Date: .

Az objektum típusát SqlParameter úgy is megadhatja, hogy egy DbType objektum tulajdonságát egy adott SqlParameter enumerálási értékre állítjaDbType. A következő enumerálási értékek lettek hozzáadva az adattípusok és DbType az datetime2 adattípusok támogatásáhozdatetimeoffset:

  • 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, a Visual Basicben nem kell megadnia DBNullnull aNothing értéket. 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, amelyekhez az érték időrésze feloldva Timevan , DateTime2és DateTimeOffset. Az alapértelmezett érték 0, ami azt jelenti, hogy a tényleges skálázás az értékből származik, és elküldi a kiszolgálónak.
Size A dátum- és időadattípusok figyelmen kívül hagyva.
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.

Feljegyzés

A nulla vagy 24 óránál ArgumentExceptionhosszabb vagy egyenlő időértékek egy .

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"

Példa időre

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 metódus azonban AddWithValue nem teszi lehetővé a DbType paraméter vagy SqlDbType a paraméter 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 paraméterértékek használata Variant vagy implicit megadása problémákat okozhat a visszamenőleges kompatibilitással és datetime az 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 Kikövetkezett 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 A megadott oszlopérték lekérése struktúraként DateTime .
GetDateTimeOffset A megadott oszlopérték lekérése struktúraként DateTimeOffset .
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 Beolvassa 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 A megadott oszlopérték lekérése struktúraként TimeSpan .
GetValue Lekéri a megadott oszlopértéket a mögöttes CLR-típusként.
GetValues Egy tömb oszlopértékeit kéri le.
GetSchemaTable DataTable Az eredményhalmaz metaadatait leíró értéket ad vissza.

Feljegyzé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 nem formázott sztringformátumok, például '20061015'a 2006. október 15-i isosztringformátum használata esetén 2006. október 15-én lesznek értelmezve.

A nulla vagy 24 óránál ArgumentExceptionhosszabb vagy egyenlő időértékek egy .

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