Sdílet prostřednictvím


Údaje o datu a času

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 schopny rozpoznat časové pásmo, což ztěžuje práci s daty z různých časových pásem.

Další informace o typech data a času v SQL Serveru naleznete v tématu Datové typy data a času a funkce.

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 do přesnosti 100 nanosekund. Povinný znak + nebo - označuje, zda je posun časového pásma přičten nebo odečten od UTC (Koordinovaný světový čas nebo Greenwichský střední čas), aby se 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 pořadí 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 SQL Serveru pro určení mezního roku, které definuje mezní datum pro přiřazení 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 a času, naleznete v tématu Použití dat a času.

Datové typy a parametry data a času

Následující výčty byly přidány k SqlDbType jako podpora pro nové datové typy data a času.

  • SqlDbType.Date

  • SqlDbType.Time

  • SqlDbType.DateTime2

  • SqlDbType.DateTimeOffSet

Datový typ pro SqlParameter můžete zadat pomocí některého z předchozích SqlDbType výčtů.

Poznámka:

Nelze nastavit vlastnost DbType objektu SqlParameter na SqlDbType.Date hodnotu.

Typ SqlParameter můžete také obecně zadat nastavením vlastnosti DbType objektu SqlParameter na konkrétní hodnotu výčtu DbType. Byly přidány následující hodnoty výčtu do DbType pro podporu datových typů datetime2 a datetimeoffset.

  • 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 datového zprostředkovatele v rámci .NET Framework pro objekt parametru je odvozen z typu hodnoty objektu parametru v rámci .NET Framework 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 Posun data a času Posun data a času
datetime System.DateTime Datum a čas Datum a čas
SmallDateTime System.DateTime Datum a čas Datum a čas

Vlastnosti sqlParameter

Následující tabulka popisuje SqlParameter vlastnosti, které jsou relevantní pro datové typy data a času.

Vlastnost Popis
IsNullable Nastaví nebo zjistí, zda je hodnota nulovatelná. 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 Ignoruje se u datových typů pro datum a čas.
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ší či rovny 24 hodinám, způsobí chybu ArgumentException.

Vytváření parametrů

Objekt SqlParameter můžete vytvořit pomocí jeho konstruktoru nebo přidáním do SqlCommandParameters kolekce voláním metody Add objektu 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ů a DataAdapter parametrů.

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"))

Na serveru se parametr @date může namapovat na datový typ date, datetime nebo datetime2. 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 jsou odvozeny z jakých typů CLR:

Typ CLR Odvozený SqlDbType
Datum a čas SqlDbType.DateTime
Časový úsek SqlDbType.Time
Posun data a času SqlDbType.DateTimeOffset

Načítání dat 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ým pro zprostředkovatele pro příslušné 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 hodnotu SqlString. 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. Pokud data nelze vyjádřit jako řetězec, nastane InvalidCastException.
GetTimeSpan Načte zadanou TimeSpan hodnotu sloupce jako strukturu.
GetValue Načte zadanou hodnotu sloupce jako její 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. Bude vyvolána výjimka, pokud je některý z těchto typů předán serveru.

Specifikace hodnot data a času jako literálů

Datové typy data a času můžete zadat pomocí různých formátů literálových řetězců, 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ž 0 nebo větší či rovny 24 hodinám, způsobí ArgumentException.

Zdroje 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 typů dat a funkcí pro práci s datem a časem v jazyce Transact-SQL.
Použití dat a času Poskytuje informace o datových typech a funkcích pro datum a čas, a ukázky jejich použití.
Datové typy (Transact-SQL) Popisuje systémové datové typy v SQL Serveru.

Viz také