Jazyk

Údaje o datu a času

SQL Server 2008 zavedl samostatné datové typy pro datum a čas a rozšířil datové typy o větší rozsah, přesnost a podporu časových pásem. Použijte balíček NuGet Microsoft.Data.SqlClient pro přístup k těmto datovým typům z klientských aplikací. Pro příklady v tomto článku importujte Microsoft.Data.SqlClient a System.Data v jazyce C# nebo Visual Basic. Běžné typy hodnot SQL jsou uvedeny v System.Data.SqlTypes.

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.

Příkaz Transact-SQL SET LANGUAGE implicitně nastaví DATEFORMAT, které určuje pořadí částí data. Příkaz Transact-SQL SET DATEFORMAT můžete na připojení použít k odstranění nejednoznačnosti hodnot data seřazením částí data v pořadí MDY, DMY, YMD, YDM, MYD nebo DYM.

Pokud neurčíte žádné DATEFORMAT připojení, 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, datetime2 nebo 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

Chcete-li zadat datový typ objektu SqlParameter , použijte jednu z předchozích SqlDbType hodnot výčtu.

Poznámka:

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

Chcete-li obecně určit typ parametru, nastavte vlastnost DbType na hodnotu výčtu DbType. Následující hodnoty DbType podporují datové typy 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
date System.DateTime Date Date
time System.TimeSpan Time Time
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 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í přesnost na zlomky sekundy pro Time, DateTime2 a DateTimeOffset. Pokud měřítko explicitně nenastavíte, ovladač odešle měřítko 7. Explicitní nastavení škály na 0 vyžaduje nula číslic zlomku sekundy.
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ů

Vytvořte objekty SqlParameter pomocí konstruktoru nebo zavolejte metodu Add v kolekci Parameters daného příkazu. Metoda Add přijímá buď 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-02T01:00:00+00:00");
Dim parameter As New SqlParameter()
parameter.ParameterName = "@DateTimeOffSet"
parameter.SqlDbType = SqlDbType.DateTimeOffset
parameter.Value = DateTimeOffset.Parse("1666-09-02T01:00:00+00:00")

AddWithValue

Pokud chcete zadat parametry, můžete také volat AddWithValue u kolekce Parameters příkazu, jak je znázorněno v následujícím fragmentu kódu. AddWithValue ale neumožňuje zadat DbType nebo SqlDbType pro parametr.

command.Parameters.AddWithValue(
    "@date", DateTimeOffset.Parse("1666-09-02T01:00:00+00:00"));
command.Parameters.AddWithValue( _
    "@date", DateTimeOffset.Parse("1666-09-02T01:00:00+00:00"))

Pro tuto DateTimeOffset hodnotu AddWithValue odvodí SqlDbType.DateTimeOffset. Chcete-li nastavit jiný typ data nebo času v SQL Serveru, nastavte vlastnost parametru SqlDbType explicitně.

Následující tabulka ukazuje, které SqlDbTypes jsou odvozeny z jakých typů CLR:

Typ CLR Odvozeno SqlDbType
DateTime SqlDbType.DateTime
TimeSpan SqlDbType.Time
DateTimeOffset 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 hodnotu sloupce jako DateTime.
GetDateTimeOffset Načte zadanou hodnotu sloupce jako DateTimeOffset.
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 SqlString. Metoda vyvolá 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. Metoda vyvolá InvalidCastException , pokud data nelze vyjádřit jako řetězec.
GetTimeSpan Načte zadanou hodnotu sloupce jako TimeSpan.
GetValue Načte zadanou hodnotu sloupce jako její základní typ „CLR“.
GetValues Načte hodnoty sloupců v poli.
GetSchemaTable Vrátí metadata sady výsledků v objektu DataTable .

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ž nula nebo větší či rovny 24 hodinám, způsobí chybu 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é