Kalendářní a časová data

SQL Server 2008 zavádí nové datové typy pro zpracování informací o datu a čase. Nové datové typy zahrnují 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 datetime 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, datetime2nebo 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.Datehodnotu .

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 datetime2datetimeoffset typů:

  • DbType.DateTime2

  • DbType.DateTimeOffset

Tyto nové výčty doplňují Date, Timea 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, DateTime2a 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 datedatový typ , datetimenebo 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.

Viz také