Taal
Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
SQL Server 2008 introduceerde afzonderlijke gegevenstypen voor datum en tijd, en uitgebreide mogelijkheden voor gegevenstypen met meer bereik, precisie en tijdzonebewustzijn. Gebruik het Microsoft.Data.SqlClient NuGet-pakket voor toegang tot deze gegevenstypen vanuit clienttoepassingen. Importeer Microsoft.Data.SqlClient en System.Data in C# of Visual Basic voor de voorbeelden in dit artikel. De algemene SQL-waardetypen blijven in System.Data.SqlTypes.
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 het tijdzoneverschil aangeven. 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.
De Transact-SQL-instructie SET LANGUAGE stelt impliciet de DATEFORMAT in die de volgorde van de datumonderdelen bepaalt. U kunt de SET DATEFORMAT instructie Transact-SQL voor een verbinding gebruiken om datumwaarden eenduidig te maken door de datumonderdelen in de volgorde MDY, DMY, YMD, YDM, MYD of DYM te rangschikken.
Als u geen verbinding DATEFORMAT opgeeft, 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 Amerikaans-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 'two digit year cutoff' voor meer informatie.
Notitie
De YDM datumnotatie wordt niet ondersteund bij het converteren van een tekenreeksindeling naar date, timedatetime2of datetimeoffset.
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 aan SqlDbType om de nieuwe datum- en tijdgegevenstypen te ondersteunen.
SqlDbType.DateSqlDbType.TimeSqlDbType.DateTime2SqlDbType.DateTimeOffset
Als u het gegevenstype voor het SqlParameter object wilt opgeven, gebruikt u een van de voorgaande SqlDbType opsommingswaarden.
Notitie
U kunt de DbType eigenschap van een SqlParameter niet instellen op SqlDbType.Date.
Als u het parametertype algemeen wilt opgeven, stelt u de DbType eigenschap in op de DbType opsommingswaarde. De volgende DbType waarden ondersteunen de datetime2 en datetimeoffset gegevenstypen:
DbType.DateTime2DbType.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 |
|---|---|---|---|
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 |
SqlParameter-eigenschappen
In de volgende tabel worden eigenschappen beschreven SqlParameter die relevant zijn voor datum- en tijdgegevenstypen.
| Eigenschap | Beschrijving |
|---|---|
| IsNullable | Bepaalt of stelt in of een waarde nulbaar is. Wanneer u een null-parameterwaarde naar de server verzendt, moet u DBNull opgeven in plaats van null (Nothing in Visual Basic). 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 | Haalt breuk-secondeprecisie op of stelt deze in voor Time, DateTime2en DateTimeOffset. Als u de schaal niet expliciet instelt, verzendt het stuurprogramma een schaal van 7. Door de schaal expliciet op 0 in te stellen, vraagt u om nul cijfers voor fractionele seconden. |
| 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
Maak SqlParameter-objecten met de constructor of roep de methode Add aan in de Parameters-verzameling van de opdracht. De Add methode accepteert constructorargumenten 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"
Voorbeeld van Tijd
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-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
Als u parameters wilt opgeven, kunt u ook Parameters aanroepen voor de verzameling AddWithValue van de opdracht, zoals wordt weergegeven in het volgende codefragment.
AddWithValue U kunt echter niet de DbType of SqlDbType voor de parameter opgeven.
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"))
Voor deze DateTimeOffset waarde leidt AddWithValueSqlDbType.DateTimeOffset af. Als u een ander SQL Server-datum- of -tijdtype wilt gebruiken, stelt u de eigenschap SqlDbType van de parameter expliciet in.
In de volgende tabel ziet u welke SqlDbTypes worden afgeleid van welke CLR-typen:
| CLR-type | Afgeleid SqlDbType |
|---|---|
DateTime |
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 DateTime. |
| GetDateTimeOffset | Haalt de opgegeven kolomwaarde op als DateTimeOffset. |
| GetProviderSpecificFieldType | Retourneert het type dat het onderliggende providerspecifieke type van 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 SqlString. De methode genereert InvalidCastException als de gegevens niet kunnen worden uitgedrukt als SqlString. |
| GetSqlValue | Haalt kolomgegevens op als standaard SqlDbType. 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. De methode genereert InvalidCastException als de gegevens niet als een tekenreeks kunnen worden uitgedrukt. |
| GetTimeSpan | Haalt de opgegeven kolomwaarde op als TimeSpan. |
| GetValue | Haalt de opgegeven kolomwaarde op als het onderliggende CLR-type. |
| GetValues | Haalt kolomwaarden op in een matrix. |
| GetSchemaTable | Retourneert de metagegevens van de resultatenset in het DataTable object. |
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 tijdens runtime evalueert en deze converteert 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. |