Jazyk
Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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.DateSqlDbType.TimeSqlDbType.DateTime2SqlDbType.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.DateTime2DbType.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. |