Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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.DateSqlDbType.TimeSqlDbType.DateTime2SqlDbType.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. |