Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
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.DateSqlDbType.TimeSqlDbType.DateTime2SqlDbType.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. |