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
, time
of datetimeoffset
datetime2
.
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
, Time
en 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 , DateTime2 en 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
, datetime
of 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 SqlDbType opgehaald. 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. |