Údaje Datum a čas
SQL Server 2008 zavedl nové datové typy pro zpracování informací o datu a čase. Nové datové typy obsahovaly samostatné typy pro datum a čas a rozšířené datové typy s větším rozsahem, přesností a povědomím o časovém pásmu. Počínaje aktualizací Service Pack (SP) 1 rozhraní .NET Framework verze 3.5 poskytuje rozhraní .NET Framework Zprostředkovatel dat pro SQL Server (System.Data.SqlClient) plnou podporu pro všechny nové funkce databázového stroje SQL Serveru 2008. Abyste mohli tyto nové funkce používat s SqlClient, musíte nainstalovat rozhraní .NET Framework 3.5 SP1 (nebo novější).
Verze SQL Serveru starší než SQL Server 2008 měly pouze dva datové typy pro práci s hodnotami data a času: datetime
a smalldatetime
. Oba tyto datové typy obsahují hodnotu data i časovou hodnotu, což ztěžuje práci pouze s hodnotami data nebo času. Tyto datové typy také podporují pouze data, ke kterým dochází po zavedení gregoriánského kalendáře v Anglii v roce 1753. Dalším omezením je, že tyto starší datové typy nejsou s časovým pásmem informovány, což ztěžuje práci s daty pocházejícími z více časových pásem.
Další informace o typech data a času v SQL Serveru naleznete v tématu Datové typy a funkce data a času.
Datové typy data a času představené v SQL Serveru 2008
Následující tabulka popisuje nové datové typy data a času.
Datový typ SQL Serveru | Popis |
---|---|
date |
Datový date typ má rozsah od 1. ledna 01 do 31. prosince 9999 s přesností na 1 den. Výchozí hodnota je 1. ledna 1900. Velikost úložiště je 3 bajty. |
time |
Datový time typ ukládá pouze časové hodnoty založené na 24hodinovém formátu. Datový time typ má rozsah 00:00:00,00.000000 až 23:59:59.99999999999 s přesností 100 nanosekund. Výchozí hodnota je 00:00:00,0000000 (půlnoc). Datový time typ podporuje přesnost desetinné sekundy definované uživatelem a velikost úložiště se liší od 3 do 6 bajtů na základě zadané přesnosti. |
datetime2 |
Datový datetime2 typ kombinuje rozsah a přesnost datových date time typů do jednoho datového typu.Výchozí hodnoty a formáty řetězcových literálů jsou stejné jako výchozí hodnoty definované v date datových typech a time datových typech. |
datetimeoffset |
Datový datetimeoffset typ má všechny funkce datetime2 s dodatečným posunem časového pásma. Posun časového pásma je reprezentován jako [+|-] HH:MM. HH je 2 číslice v rozsahu od 00 do 14, které představují počet hodin v posunu časového pásma. MM je 2 číslice v rozsahu od 00 do 59, které představují počet dalších minut v posunu časového pásma. Formáty času jsou podporovány na 100 nanosekundách. Povinný znak + nebo - označuje, zda je posun časového pásma přidán nebo odečten od UTC (Universal Time Coordinate nebo Greenwich Střední čas), aby získal místní čas. |
Poznámka:
Další informace o použití klíčového Type System Version
slova naleznete v tématu ConnectionString.
Formát data a objednávka data
Způsob, jakým SQL Server analyzuje hodnoty data a času, závisí nejen na verzi systému typů a verzi serveru, ale také na výchozím nastavení jazyka a formátu serveru. Řetězec data, který funguje pro formáty kalendářních dat v jednom jazyce, může být nerozpoznaný, pokud je dotaz proveden připojením, které používá jiný jazyk a nastavení formátu data.
Transact-SQL SET LANGUAGE příkaz implicitně nastaví DATEFORMAT, který určuje pořadí částí kalendářních dat. Příkaz SET DATEFORMAT Transact-SQL pro připojení můžete použít k nejednoznačnosti hodnot kalendářních dat seřazením částí kalendářních dat v MDY, DMY, YMD, YDM, MYD nebo DYM pořadí.
Pokud pro připojení nezadáte žádný formát DATEFORMAT, SQL Server použije výchozí jazyk přidružený k připojení. Například řetězec data 01/02/03 by byl interpretován jako MDY (2. ledna 2003) na serveru s jazykovým nastavením USA angličtiny a jako DMY (1. února 2003) na serveru s jazykovým nastavením britské angličtiny. Rok se určuje pomocí pravidla pro odříznutý rok SQL Serveru, které definuje datum odříznutí pro přiřazení hodnoty století. Další informace najdete v tématu dvoumístný rok cutoff Option.
Poznámka:
Formát data YDM není podporován při převodu z formátu řetězce na date
, time
, datetime2
nebo datetimeoffset
.
Další informace o tom, jak SQL Server interpretuje data data a času, naleznete v tématu Použití dat data a času.
Datové typy a parametry data a času
Následující výčty byly přidány pro SqlDbType podporu nových datových typů data a času.
SqlDbType.Date
SqlDbType.Time
SqlDbType.DateTime2
SqlDbType.DateTimeOffSet
Datový typ datového typu můžete SqlParameter zadat pomocí jednoho z předchozích SqlDbType výčtů.
Poznámka:
Nelze nastavit DbType
vlastnost SqlParameter
na SqlDbType.Date
hodnotu .
Typ obecně můžete zadat SqlParameter také nastavením DbType vlastnosti SqlParameter
objektu na konkrétní DbType hodnotu výčtu. Byly přidány následující hodnoty výčtu pro DbType podporu datových datetime2
datetimeoffset
typů:
DbType.DateTime2
DbType.DateTimeOffset
Tyto nové výčty doplňují Date
, Time
a DateTime
výčty, které existovaly v dřívějších verzích rozhraní .NET Framework.
Typ zprostředkovatele dat rozhraní .NET Framework objektu parametru je odvozen z typu rozhraní .NET Framework hodnoty objektu parametru nebo z DbType
objektu parametru. Nebyly zavedeny žádné nové System.Data.SqlTypes datové typy, které by podporovaly nové datové typy data a času. Následující tabulka popisuje mapování mezi datovými typy data a času SQL Serveru 2008 a datovými typy CLR.
Datový typ SQL Serveru | Typ rozhraní .NET Framework | System.Data.SqlDbType | System.Data.DbType |
---|---|---|---|
datum | System.DateTime | Datum | Datum |
čas | System.TimeSpan | Čas | Čas |
datetime2 | System.DateTime | DateTime2 | DateTime2 |
datetimeoffset | System.DateTimeOffset | DateTimeOffset | DateTimeOffset |
datetime | System.DateTime | DateTime | DateTime |
smalldatetime | System.DateTime | DateTime | DateTime |
Vlastnosti sqlParameter
Následující tabulka popisuje SqlParameter
vlastnosti, které jsou relevantní pro datové typy data a času.
Vlastnost | Popis |
---|---|
IsNullable | Získá nebo nastaví, zda hodnota je nullable. Když odešlete hodnotu parametru null na server, je nutné zadat DBNullmísto null (Nothing v jazyce Visual Basic). Další informace o hodnotách null databáze naleznete v tématu Zpracování hodnot null. |
Precision | Získá nebo nastaví maximální počet číslic použitých k reprezentaci hodnoty. Toto nastavení se ignoruje u datových typů data a času. |
Scale | Získá nebo nastaví počet desetinných míst, na které je časová část hodnoty vyřešena pro Time , DateTime2 a DateTimeOffset . Výchozí hodnota je 0, což znamená, že skutečné škálování je odvozeno z hodnoty a odesláno na server. |
Size | U datových typů data a času se ignoruje. |
Value | Získá nebo nastaví hodnotu parametru. |
SqlValue | Získá nebo nastaví hodnotu parametru. |
Poznámka:
Časové hodnoty, které jsou menší než nula nebo větší nebo rovny 24 hodin, způsobí ArgumentExceptionchybu .
Vytváření parametrů
Objekt můžete vytvořit SqlParameter pomocí jeho konstruktoru nebo jeho přidáním do SqlCommandParameters kolekce voláním Add
metody SqlParameterCollection. Metoda Add
bude brát jako vstupní argumenty konstruktoru nebo existující objekt parametru.
Další části tohoto tématu obsahují příklady, jak zadat parametry data a času. Další příklady práce s parametry najdete v tématu Konfigurace parametrů a datových typů parametrů a parametrů DataAdapter.
Příklad data
Následující fragment kódu ukazuje, jak zadat date
parametr.
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říklad času
Následující fragment kódu ukazuje, jak zadat time
parametr.
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;
Příklad datetime2
Následující fragment kódu ukazuje, jak zadat datetime2
parametr s částmi data i času.
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");
Příklad DateTimeOffSet
Následující fragment kódu ukazuje, jak zadat DateTimeOffSet
parametr s datem, časem a posunem časového pásma 0.
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
Parametry můžete také zadat pomocí AddWithValue
metody , SqlCommandjak je znázorněno v následujícím fragmentu kódu. Metoda AddWithValue
však neumožňuje zadat DbType nebo SqlDbType pro parametr.
command.Parameters.AddWithValue(
"@date", DateTimeOffset.Parse("16660902"));
command.Parameters.AddWithValue( _
"@date", DateTimeOffset.Parse("16660902"))
Parametr @date
se může namapovat na date
datový typ , datetime
nebo datetime2
na serveru. Při práci s novými datetime
datovými typy je nutné explicitně nastavit vlastnost parametru SqlDbType na datový typ instance. Použití Variant nebo implicitní zadávání hodnot parametrů může způsobit problémy se zpětnou kompatibilitou s datetime
datovými typy.smalldatetime
Následující tabulka ukazuje, které SqlDbTypes
typy CLR jsou odvozeny:
Typ CLR | Odvozené sqlDbType |
---|---|
DateTime | SqlDbType.DateTime |
TimeSpan | SqlDbType.Time |
DateTimeOffset | SqlDbType.DateTimeOffset |
Načítání dat data a času
Následující tabulka popisuje metody, které se používají k načtení hodnot data a času SYSTÉMU SQL Server 2008.
Metoda SqlClient | Popis |
---|---|
GetDateTime | Načte zadanou DateTime hodnotu sloupce jako strukturu. |
GetDateTimeOffset | Načte zadanou DateTimeOffset hodnotu sloupce jako strukturu. |
GetProviderSpecificFieldType | Vrátí typ, který je základním typem specifický pro zprostředkovatele pro dané pole. Vrátí stejné typy jako GetFieldType u nových typů data a času. |
GetProviderSpecificValue | Načte hodnotu zadaného sloupce. Vrátí stejné typy jako GetValue pro nové typy data a času. |
GetProviderSpecificValues | Načte hodnoty v zadaném poli. |
GetSqlString | Načte hodnotu sloupce jako SqlStringhodnotu . Nastane InvalidCastException , pokud data nelze vyjádřit jako SqlString . |
GetSqlValue | Načte data sloupců jako výchozí SqlDbType . Vrátí stejné typy jako GetValue pro nové typy data a času. |
GetSqlValues | Načte hodnoty v zadaném poli. |
GetString | Načte hodnotu sloupce jako řetězec, pokud je verze systému typů nastavena na SQL Server 2005. Nastane InvalidCastException , pokud data nelze vyjádřit jako řetězec. |
GetTimeSpan | Načte zadanou TimeSpan hodnotu sloupce jako strukturu. |
GetValue | Načte zadanou hodnotu sloupce jako základní typ CLR. |
GetValues | Načte hodnoty sloupců v poli. |
GetSchemaTable | DataTable Vrátí hodnotu, která popisuje metadata sady výsledků. |
Poznámka:
Nové datum a čas SqlDbTypes
nejsou podporovány pro kód, který se spouští v procesu na SQL Serveru. Pokud se server předá některému z těchto typů, vyvolá se výjimka.
Zadání hodnot data a času jako literálů
Datové typy data a času můžete zadat pomocí různých formátů řetězců literálů, které sql Server následně vyhodnotí za běhu a převede je na interní struktury data a času. SQL Server rozpozná data a čas, která jsou uzavřená v jednoduchých uvozovkách ('). Následující příklady ukazují některé formáty:
Abecední formáty kalendářních dat, například
'October 15, 2006'
.Číselné formáty kalendářních dat, například
'10/15/2006'
.Neformátované formáty řetězců, například
'20061015'
, které by byly interpretovány jako 15. října 2006, pokud používáte standardní formát data ISO.
Časové hodnoty, které jsou menší než nula nebo větší nebo rovny 24 hodin, způsobí ArgumentExceptionchybu .
Prostředky dokumentace k SQL Serveru
Další informace o práci s hodnotami data a času v SQL Serveru najdete v následujících článcích.
Článek | Popis |
---|---|
Datové typy a funkce data a času (Transact-SQL) | Poskytuje přehled všech datových typů a funkcí data a času jazyka Transact-SQL. |
Použití dat data data a času | Poskytuje informace o datovýchtypech |
Datové typy (Transact-SQL) | Popisuje systémové datové typy v SQL Serveru. |