Språk
Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
SQL Server 2008 introducerade separata datatyper för datum och tid och utökade datatyper med större intervall, precision och tidszonsmedvetenhet. Använd Microsoft.Data.SqlClient NuGet-paket för åtkomst till dessa datatyper från klientprogram. För exemplen i den här artikeln importera Microsoft.Data.SqlClient och System.Data i C# eller Visual Basic. De vanliga SQL-värdetyperna finns kvar i System.Data.SqlTypes.
Versioner av SQL Server tidigare än SQL Server 2008 hade bara två datatyper för att arbeta med datum- och tidsvärden: datetime och smalldatetime. Båda dessa datatyper innehåller både datumvärdet och ett tidsvärde, vilket gör det svårt att arbeta med endast datum- eller endast tidsvärden. Dessutom stöder dessa datatyper endast datum som inträffar efter introduktionen av den gregorianska kalendern i England 1753. En annan begränsning är att dessa äldre datatyper inte är tidszonsmedvetna, vilket gör det svårt att arbeta med data som kommer från flera tidszoner.
Mer information om datum- och tidstyper i SQL Server finns i Datatyper och funktioner för datum och tid.
Datatyper för datum/tid som introduceras i SQL Server 2008
I följande tabell beskrivs de nya datatyperna för datum och tid.
| SQL Server-datatyp | beskrivning |
|---|---|
date |
Datatypen date har ett intervall på 1 januari 01 till 31 december 9999 med en noggrannhet på 1 dag. Standardvärdet är 1 januari 1900. Lagringsstorleken är 3 byte. |
time |
Datatypen time lagrar endast tidsvärden baserat på en 24-timmarsklocka. Datatypen time har ett intervall på 00:00:00.0000000 till 23:59:59.999999999 med en noggrannhet på 100 nanosekunder. Standardvärdet är 00:00:00.00000000 (midnatt). Datatypen time stöder användardefinierad bråkdels sekundprecision och lagringsstorleken varierar från 3 till 6 byte, baserat på den angivna precisionen. |
datetime2 |
Datatypen datetime2 kombinerar intervallet och precisionen för datatyperna date och time till en enda datatyp.Standardvärdena och strängliteralformaten är desamma som de som definieras i datatyperna date och time . |
datetimeoffset |
Datatypen datetimeoffset har alla funktioner datetime2 i med en extra tidszonsförskjutning. Tidszonsförskjutningen representeras som [+|-] HH:MM. HH är två siffror från 00 till 14 som representerar antalet timmar i tidszonsförskjutningen. MM är 2 siffror från 00 till 59 som representerar antalet ytterligare minuter i tidszonsförskjutningen. Tidsformat stöds för 100 nanosekunder. Det obligatoriska tecknet + eller - anger om tidszonsförskjutningen läggs till eller subtraheras från UTC (Universal Time Coordinate eller Greenwich Mean Time) för att hämta den lokala tiden. |
Kommentar
Mer information om hur du använder nyckelordet finns i Type System VersionConnectionString.
Datumformat och datumordning
Hur SQL Server parsar datum- och tidsvärden beror inte bara på typsystemversion och serverversion, utan även på serverns standardspråk och formatinställningar. En datumsträng som fungerar för datumformaten för ett språk kan vara oigenkännlig om frågan körs av en anslutning som använder en annan språk- och datumformatinställning.
Transact-SQL-instruktionen SET LANGUAGE anger implicit DATEFORMAT som avgör ordningen på datumdelarna. Du kan använda Transact-SQL-instruktionen SET DATEFORMAT på en anslutning för att skilja datumvärden genom att ordna datumdelarna i MDY, DMY, YMD, YDM, MYD eller DYM ordning.
Om du inte anger något DATEFORMAT för anslutningen använder SQL Server standardspråket som är associerat med anslutningen. Till exempel tolkas en datumsträng med "01/02/03" som MDY (2 januari 2003) på en server med språkinställningen amerikansk engelska och som DMY (1 februari 2003) på en server med språkinställningen brittisk engelska. Året bestäms med hjälp av SQL Server-regeln för brytår, som definierar slutdatumet för tilldelning av talets värde. Mer information finns i tvåsiffrigt alternativ för årsavstängning.
Kommentar
Datumformatet YDM stöds inte när du konverterar från ett strängformat till date, time, datetime2eller datetimeoffset.
Mer information om hur SQL Server tolkar datum- och tidsdata finns i Använda datum- och tidsdata.
Datatyper och parametrar för datum/tid
Följande uppräkningar har lagts till för att SqlDbType stödja de nya datum- och tidsdatatyperna.
SqlDbType.DateSqlDbType.TimeSqlDbType.DateTime2SqlDbType.DateTimeOffset
Om du vill ange datatypen för SqlParameter objektet använder du något av ovanstående SqlDbType uppräkningsvärden.
Kommentar
Du kan inte ange DbType egenskapen för en SqlParameter till SqlDbType.Date.
Om du vill ange parametertypen generiskt anger du egenskapen DbType till uppräkningsvärdet DbType. Följande DbType värden stöder datatyperna datetime2 och datetimeoffset :
DbType.DateTime2DbType.DateTimeOffset
Dessa nya uppräkningar kompletterar uppräkningarna Date, Timeoch DateTime som fanns i tidigare versioner av .NET Framework.
Dataprovidertypen .NET Framework för ett parameterobjekt härleds från .NET Framework-typen för parameterobjektets värde eller från DbType parameterobjektet. Inga nya System.Data.SqlTypes datatyper har introducerats för att stödja de nya datum- och tidsdatatyperna. I följande tabell beskrivs mappningarna mellan datum- och tidsdatatyperna för SQL Server 2008 och CLR-datatyperna.
| SQL Server-datatyp | .NET Framework-typ | 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 |
Egenskaper för SqlParameter
I följande tabell beskrivs SqlParameter egenskaper som är relevanta för datum- och tidsdatatyper.
| Fastighet | beskrivning |
|---|---|
| IsNullable | Hämtar eller anger om ett värde är nullbart. När du skickar ett null-parametervärde till servern måste du ange DBNull, i stället null för (Nothing i Visual Basic). Mer information om null-databaser finns i Hantera nullvärden. |
| Precision | Hämtar eller anger det maximala antalet siffror som används för att representera värdet. Den här inställningen ignoreras för datum- och tidsdatatyper. |
| Scale | Hämtar eller anger bråksekundersprecision för Time, DateTime2och DateTimeOffset. Om du inte uttryckligen anger skalan skickar drivrutinen skala 7. Om du uttryckligen anger skalan till 0 begärs noll bråksekunderssiffror. |
| Size | Ignoreras för datum- och tidtyper. |
| Value | Hämtar eller anger parametervärdet. |
| SqlValue | Hämtar eller anger parametervärdet. |
Kommentar
Tidsvärden som är mindre än noll eller större än eller lika med 24 timmar genererar en ArgumentException.
Skapa parametrar
Skapa SqlParameter objekt med konstruktorn eller anropa Add metoden i kommandots Parameters samling. Metoden Add tar antingen konstruktorargument eller ett befintligt parameterobjekt.
Nästa avsnitt i det här avsnittet innehåller exempel på hur du anger datum- och tidsparametrar. Ytterligare exempel på hur du arbetar med parametrar finns i Konfigurera parametrar och Parameterdatatyper och DataAdapter-parametrar.
Datumexempel
Följande kodfragment visar hur du anger en date parameter.
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"
Tidsexempel
Följande kodfragment visar hur du anger en time parameter.
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
Datetime2-exempel
Följande kodfragment visar hur du anger en datetime2 parameter med både datum- och tidsdelarna.
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")
DateTimeOffSet-exempel
Följande kodfragment visar hur du anger en DateTimeOffset parameter med ett datum, en tid och en tidszonsförskjutning på 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
Om du vill ange parametrar kan du även anropa AddWithValue på kommandots Parameters-samling, enligt följande kodfragment. Du kan dock AddWithValue inte ange DbType eller SqlDbType för parametern.
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"))
För det här DateTimeOffset värdet AddWithValue härleder SqlDbType.DateTimeOffset. Om du vill rikta in en annan SQL Server datum- eller tidstyp anger du parameterns SqlDbType egenskap explicit.
Följande tabell visar vilka SqlDbTypes som härleds från vilka CLR-typer:
| CLR-typ | Härledd SqlDbType |
|---|---|
DateTime |
SqlDbType.DateTime |
TimeSpan |
SqlDbType.Time |
DateTimeOffset |
SqlDbType.DateTimeOffset |
Hämtar datum- och tidsdata
I följande tabell beskrivs metoder som används för att hämta datum- och tidsvärden för SQL Server 2008.
| SqlClient-metod | beskrivning |
|---|---|
| GetDateTime | Hämtar det angivna kolumnvärdet som DateTime. |
| GetDateTimeOffset | Hämtar det angivna kolumnvärdet som DateTimeOffset. |
| GetProviderSpecificFieldType | Returnerar den typ som är den underliggande providerspecifika typen för fältet. Returnerar samma typer som GetFieldType för nya datum- och tidstyper. |
| GetProviderSpecificValue | Hämtar värdet för den angivna kolumnen. Returnerar samma typer som GetValue för de nya datum- och tidstyperna. |
| GetProviderSpecificValues | Hämtar värdena i den angivna matrisen. |
| GetSqlString | Hämtar kolumnvärdet som SqlString. Metoden genererar InvalidCastException om data inte kan uttryckas som SqlString. |
| GetSqlValue | Hämtar kolumndata som standard SqlDbType. Returnerar samma typer som GetValue för de nya datum- och tidstyperna. |
| GetSqlValues | Hämtar värdena i den angivna matrisen. |
| GetString | Hämtar kolumnvärdet som en sträng om typsystemversionen är inställd på SQL Server 2005. Metoden genererar InvalidCastException om data inte kan uttryckas som en sträng. |
| GetTimeSpan | Hämtar det angivna kolumnvärdet som TimeSpan. |
| GetValue | Hämtar det angivna kolumnvärdet som den underliggande CLR-typen. |
| GetValues | Hämtar kolumnvärden i en matris. |
| GetSchemaTable | Returnerar resultatuppsättningens metadata i DataTable objektet. |
Kommentar
Det nya datumet och tiden SqlDbTypes stöds inte för kod som körs i processen i SQL Server. Ett undantag utlöses om någon av dessa typer skickas till servern.
Ange datum- och tidsvärden som literaler
Du kan ange datatyper för datum och tid med hjälp av olika literalsträngsformat, som SQL Server sedan utvärderar vid körning och konverterar dem till interna datum-/tidsstrukturer. SQL Server identifierar datum- och tidsdata som omges av enkla citattecken ('). Följande exempel visar några format:
Alfabetiska datumformat, till exempel
'October 15, 2006'.Numeriska datumformat, till exempel
'10/15/2006'.Oförparerade strängformat, till exempel
'20061015', som skulle tolkas som 15 oktober 2006 om du använder iso-standardformatet för datum.
Tidsvärden som är mindre än noll eller större än eller lika med 24 timmar genererar en ArgumentException.
SQL Server-dokumentresurser
Mer information om hur du arbetar med datum- och tidsvärden i SQL Server finns i följande artiklar.
| Artikel | beskrivning |
|---|---|
| Datatyper och funktioner för datum och tid (Transact-SQL) | Ger en översikt över alla datatyper och funktioner för Transact-SQL-datum och tid. |
| Använda datum- och tidsdata | Innehåller information om datatyper och funktioner för datum och tid samt exempel på hur du använder dem. |
| Datatyper (Transact-SQL) | Beskriver systemdatatyper i SQL Server. |