Delen via


Datum- en tijdgegevens

SQL Server 2008 heeft nieuwe gegevenstypen geïntroduceerd voor het verwerken van datum- en tijdgegevens. De nieuwe gegevenstypen bevatten afzonderlijke typen voor datum en tijd, en uitgebreide gegevenstypen met meer bereik, precisie en tijdzonebewustzijn. Vanaf .NET Framework versie 3.5 Service Pack (SP) 1 biedt de .NET Framework-gegevensprovider voor SQL Server (System.Data.SqlClient) volledige ondersteuning voor alle nieuwe functies van de SQL Server 2008-database-engine. U moet .NET Framework 3.5 SP1 (of hoger) installeren om deze nieuwe functies te kunnen gebruiken met SqlClient.

Versies van SQL Server ouder dan SQL Server 2008 hadden slechts twee gegevenstypen voor het werken met datum- en tijdwaarden: datetime en smalldatetime. Beide gegevenstypen bevatten zowel de datumwaarde als een tijdwaarde, waardoor het lastig is om alleen datum- of alleen tijdwaarden te gebruiken. Deze gegevenstypen ondersteunen ook alleen datums die plaatsvinden na de introductie van de Gregoriaanse kalender in Engeland in 1753. Een andere beperking is dat deze oudere gegevenstypen geen tijdzonebewust zijn, waardoor het lastig is om te werken met gegevens die afkomstig zijn uit meerdere tijdzones.

Zie Datum- en tijdgegevenstypen en -functies voor meer informatie over datum- en tijdtypen in SQL Server.

Datum/tijd-gegevenstypen geïntroduceerd in SQL Server 2008

In de volgende tabel worden de nieuwe gegevenstypen voor datum en tijd beschreven.

SQL Server-gegevenstype Beschrijving
date Het date gegevenstype heeft een bereik van 1 januari 01 tot en met 31 december 9999 met een nauwkeurigheid van 1 dag. De standaardwaarde is 1 januari 1900. De opslaggrootte is 3 bytes.
time Het time gegevenstype slaat alleen tijdwaarden op, op basis van een 24-uurs klok. Het time gegevenstype heeft een bereik van 00:00:00.0000000 tot en met 23:59:59.99999999 met een nauwkeurigheid van 100 nanoseconden. De standaardwaarde is 00:00:00.0000000 (middernacht). Het time gegevenstype ondersteunt door de gebruiker gedefinieerde secondeprecisie en de opslaggrootte varieert van 3 tot 6 bytes, op basis van de opgegeven precisie.
datetime2 Het datetime2 gegevenstype combineert het bereik en de precisie van de date en time gegevenstypen in één gegevenstype.

De standaardwaarden en letterlijke tekenreeksindelingen zijn hetzelfde als de waarden die in de date en time gegevenstypen zijn gedefinieerd.
datetimeoffset Het datetimeoffset gegevenstype heeft alle functies van datetime2 met een extra tijdzone-offset. De tijdzone-offset wordt weergegeven als [+|-] UU:MM. UU is 2 cijfers variërend van 00 tot 14 die het aantal uren in de tijdzone-offset vertegenwoordigen. MM is 2 cijfers van 00 tot 59 die het aantal extra minuten in de tijdzone-offset vertegenwoordigen. Tijdnotaties worden ondersteund tot 100 nanoseconden. Het verplichte + of - teken geeft aan of de tijdzone-offset wordt toegevoegd of afgetrokken van UTC (Universal Time Coördinaat of Greenwich Mean Time) om de lokale tijd te verkrijgen.

Notitie

Zie voor meer informatie over het gebruik van het Type System Version trefwoord ConnectionString.

Datumnotatie en datumvolgorde

Hoe SQL Server datum- en tijdwaarden parseert, is niet alleen afhankelijk van de systeemversie en serverversie van het type, maar ook van de standaardtaal- en indelingsinstellingen van de server. Een datumtekenreeks die geschikt is voor de datumnotaties van één taal, kan onherkenbaar zijn als de query wordt uitgevoerd door een verbinding die gebruikmaakt van een andere taal- en datumnotatieinstelling.

Met de transact-SQL SET LANGUAGE-instructie wordt impliciet de DATEFORMAT ingesteld die de volgorde van de datumonderdelen bepaalt. U kunt de INSTRUCTIE SET DATEFORMAT Transact-SQL gebruiken voor een verbinding om datumwaarden niet eenduidig te maken door de datumonderdelen in MDY, DMY, YMD, YDM, MYD of DYM-volgorde te rangschikken.

Als u geen DATEFORMAT opgeeft voor de verbinding, gebruikt SQL Server de standaardtaal die aan de verbinding is gekoppeld. Een datumtekenreeks van '01/02/03' wordt bijvoorbeeld geïnterpreteerd als MDY (2 januari 2003) op een server met een taalinstelling van Verenigde Staten Engels en als DMY (1 februari 2003) op een server met een taalinstelling van Brits Engels. Het jaar wordt bepaald door de cutoff year-regel van SQL Server te gebruiken, waarmee de afkapdatum wordt gedefinieerd voor het toewijzen van de eeuwwaarde. Zie de optie voor het afsnijden van twee cijfers voor meer informatie.

Notitie

De YDM-datumnotatie wordt niet ondersteund bij het converteren van een tekenreeksindeling naar date, timeof datetimeoffsetdatetime2.

Zie Datum- en tijdgegevens gebruiken voor meer informatie over hoe SQL Server datum- en tijdgegevens interpreteert.

Datum-/tijdgegevenstypen en -parameters

De volgende opsommingen zijn toegevoegd om de nieuwe datum- en tijdgegevenstypen te SqlDbType ondersteunen.

  • SqlDbType.Date

  • SqlDbType.Time

  • SqlDbType.DateTime2

  • SqlDbType.DateTimeOffSet

U kunt het gegevenstype van een SqlParameter opgeven met behulp van een van de voorgaande SqlDbType opsommingen.

Notitie

U kunt de DbType eigenschap van een SqlParameter eigenschap niet instellen op SqlDbType.Date.

U kunt ook het type van een SqlParameter algemeen object opgeven door de DbType eigenschap van een SqlParameter object in te stellen op een bepaalde DbType opsommingswaarde. De volgende opsommingswaarden zijn toegevoegd ter DbType ondersteuning van de datetime2 en datetimeoffset gegevenstypen:

  • DbType.DateTime2

  • DbType.DateTimeOffset

Deze nieuwe opsommingen vormen een aanvulling op de Date, Timeen DateTime opsommingen, die bestonden in eerdere versies van .NET Framework.

Het .NET Framework-gegevensprovidertype van een parameterobject wordt afgeleid van het .NET Framework-type van de waarde van het parameterobject of van het DbType parameterobject. Er zijn geen nieuwe System.Data.SqlTypes gegevenstypen geïntroduceerd ter ondersteuning van de nieuwe datum- en tijdgegevenstypen. In de volgende tabel worden de toewijzingen tussen de datum- en tijdgegevenstypen van SQL Server 2008 en de CLR-gegevenstypen beschreven.

SQL Server-gegevenstype .NET Framework-type System.Data.SqlDbType System.Data.DbType
datum System.DateTime Datum Datum
tijd System.TimeSpan Tijd Tijd
datetime2 System.DateTime DateTime2 DateTime2
datetimeoffset System.DateTimeOffset DateTimeOffset DateTimeOffset
datetime System.DateTime DateTime DateTime
smalldatetime System.DateTime DateTime DateTime

SqlParameter-eigenschappen

In de volgende tabel worden eigenschappen beschreven SqlParameter die relevant zijn voor datum- en tijdgegevenstypen.

Eigenschappen Beschrijving
IsNullable Hiermee wordt opgehaald of ingesteld of een waarde nullable is. Wanneer u een null-parameterwaarde naar de server verzendt, moet u in plaats null van (Nothing in Visual Basic) opgevenDBNull. Zie Null-waarden verwerken voor meer informatie over database-null-waarden.
Precision Hiermee wordt het maximum aantal cijfers opgehaald of ingesteld dat wordt gebruikt om de waarde weer te geven. Deze instelling wordt genegeerd voor gegevenstypen voor datum en tijd.
Scale Hiermee wordt het aantal decimalen opgehaald of ingesteld waarop het tijdgedeelte van de waarde wordt omgezet Time, DateTime2en DateTimeOffset. De standaardwaarde is 0, wat betekent dat de werkelijke schaal wordt afgeleid van de waarde en naar de server wordt verzonden.
Size Genegeerd voor datum- en tijdgegevenstypen.
Value Hiermee haalt u de parameterwaarde op of stelt u deze in.
SqlValue Hiermee haalt u de parameterwaarde op of stelt u deze in.

Notitie

Tijdwaarden die kleiner zijn dan nul of groter dan of gelijk aan 24 uur, geven een ArgumentException.

Parameters maken

U kunt een SqlParameter object maken met behulp van de constructor of door het toe te voegen aan een SqlCommandParameters verzameling door de Add methode van de SqlParameterCollection. De Add methode wordt gebruikt als invoerconstructorargumenten of een bestaand parameterobject.

De volgende secties in dit onderwerp bevatten voorbeelden van het opgeven van datum- en tijdparameters. Zie Parameters en parametergegevenstypen en DataAdapter-parameters configureren voor meer voorbeelden van het werken met parameters.

Voorbeeld van datum

Het volgende codefragment laat zien hoe u een date parameter opgeeft.

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"

Tijdvoorbeeld

Het volgende codefragment laat zien hoe u een time parameter opgeeft.

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;

Datum/tijd2-voorbeeld

Het volgende codefragment laat zien hoe u een datetime2 parameter opgeeft met zowel de datum- als tijdonderdelen.

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-voorbeeld

Het volgende codefragment laat zien hoe u een DateTimeOffSet parameter met een datum, een tijd en een tijdzoneverschil van 0 opgeeft.

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

U kunt ook parameters opgeven met behulp van de AddWithValue methode van een SqlCommand, zoals wordt weergegeven in het volgende codefragment. Met de AddWithValue methode kunt u echter niet de DbType parameter of SqlDbType de parameter opgeven.

command.Parameters.AddWithValue(
    "@date", DateTimeOffset.Parse("16660902"));
command.Parameters.AddWithValue( _
    "@date", DateTimeOffset.Parse("16660902"))

De @date parameter kan worden toegewezen aan een date, datetimeof datetime2 gegevenstype op de server. Wanneer u met de nieuwe datetime gegevenstypen werkt, moet u de eigenschap van SqlDbType de parameter expliciet instellen op het gegevenstype van het exemplaar. Het gebruik of Variant impliciet opgeven van parameterwaarden kan problemen veroorzaken met achterwaartse compatibiliteit met de datetime en smalldatetime gegevenstypen.

In de volgende tabel ziet u welke SqlDbTypes worden afgeleid van welke CLR-typen:

CLR-type Uitgestelde SqlDbType
Datum en tijd SqlDbType.DateTime
TimeSpan SqlDbType.Time
DateTimeOffset SqlDbType.DateTimeOffset

Datum- en tijdgegevens ophalen

In de volgende tabel worden methoden beschreven die worden gebruikt voor het ophalen van datum- en tijdwaarden voor SQL Server 2008.

SqlClient-methode Beschrijving
GetDateTime Haalt de opgegeven kolomwaarde op als een DateTime structuur.
GetDateTimeOffset Haalt de opgegeven kolomwaarde op als een DateTimeOffset structuur.
GetProviderSpecificFieldType Retourneert het type dat het onderliggende providerspecifieke type voor het veld is. Retourneert dezelfde typen als GetFieldType voor nieuwe datum- en tijdtypen.
GetProviderSpecificValue Haalt de waarde van de opgegeven kolom op. Retourneert dezelfde typen als GetValue voor de nieuwe datum- en tijdtypen.
GetProviderSpecificValues Haalt de waarden op in de opgegeven matrix.
GetSqlString Haalt de kolomwaarde op als een SqlString. Een InvalidCastException treedt op als de gegevens niet kunnen worden uitgedrukt als een SqlString.
GetSqlValue Hiermee worden kolomgegevens als standaard SqlDbTypeopgehaald. Retourneert dezelfde typen als GetValue voor de nieuwe datum- en tijdtypen.
GetSqlValues Haalt de waarden op in de opgegeven matrix.
GetString Haalt de kolomwaarde op als een tekenreeks als de typesysteemversie is ingesteld op SQL Server 2005. Er InvalidCastException treedt een op als de gegevens niet als een tekenreeks kunnen worden uitgedrukt.
GetTimeSpan Haalt de opgegeven kolomwaarde op als een TimeSpan structuur.
GetValue Haalt de opgegeven kolomwaarde op als het onderliggende CLR-type.
GetValues Haalt kolomwaarden op in een matrix.
GetSchemaTable Retourneert een DataTable die de metagegevens van de resultatenset beschrijft.

Notitie

De nieuwe datum en tijd SqlDbTypes worden niet ondersteund voor code die in verwerking wordt uitgevoerd in SQL Server. Er wordt een uitzondering gegenereerd als een van deze typen wordt doorgegeven aan de server.

Datum- en tijdwaarden opgeven als letterlijke waarden

U kunt gegevenstypen voor datum en tijd opgeven met behulp van verschillende letterlijke tekenreeksindelingen, die SQL Server vervolgens evalueert tijdens runtime, waarbij ze worden geconverteerd naar interne datum-/tijdstructuren. SQL Server herkent datum- en tijdgegevens tussen enkele aanhalingstekens ('). In de volgende voorbeelden ziet u enkele indelingen:

  • Alfabetische datumnotaties, zoals 'October 15, 2006'.

  • Numerieke datumnotaties, zoals '10/15/2006'.

  • Niet-afgeschreven tekenreeksindelingen, zoals '20061015', die worden geïnterpreteerd als 15 oktober 2006 als u de ISO-standaarddatumnotatie gebruikt.

Tijdwaarden die kleiner zijn dan nul of groter dan of gelijk aan 24 uur, geven een ArgumentException.

SQL Server-documentatiebronnen

Zie de volgende artikelen voor meer informatie over het werken met datum- en tijdwaarden in SQL Server.

Artikel Beschrijving
Datum- en tijdgegevenstypen en -functies (Transact-SQL) Biedt een overzicht van alle Transact-SQL-datum- en tijdgegevenstypen en -functies.
Datum- en tijdgegevens gebruiken Bevat informatie over de datum- en tijdgegevenstypen en -functies en voorbeelden van het gebruik ervan.
Gegevenstypen (Transact-SQL) Beschrijft systeemgegevenstypen in SQL Server.

Zie ook