Datums- und Zeitdaten
SQL Server 2008 bietet neue Datentypen für Datums- und Uhrzeitinformationen. Die neuen Datentypen umfassen getrennte Typen für Datum und Uhrzeit sowie erweiterte Datentypen mit größerem Umfang, höherer Präzision und besserer Berücksichtigung von Zeitzonen. Ab .NET Framework Version 3.5 Service Pack (SP) 1 bietet der .NET Framework-Datenanbieter für SQL Server (System.Data.SqlClient) vollständige Unterstützung für alle neuen Funktionen der SQL Server 2008-Datenbank-Engine. Sie müssen .NET Framework 3.5 SP1 (oder höher) installieren, um diese neuen Funktionen mit SqlClient zu verwenden.
SQL Server-Versionen vor SQL Server 2008 hatten nur zwei Datentypen für das Arbeiten mit Datums- und Uhrzeitwerten: datetime
und smalldatetime
. Beide Datentypen enthalten sowohl einen Datumswert als auch einen Uhrzeitwert, wodurch es schwierig ist, nur mit den Datums- oder nur mit den Uhrzeitwerten zu arbeiten. Außerdem unterstützen diese Datentypen nur Datumsangaben nach Einführung des gregorianischen Kalenders in England im Jahr 1753. Eine weitere Einschränkung besteht darin, dass diese älteren Datentypen keine Zeitzonen berücksichtigen, was es schwierig macht, mit Daten zu arbeiten, die aus mehreren Zeitzonen stammen.
Weitere Informationen zu Datums- und Uhrzeittypen in SQL Server finden Sie unter Datums- und Uhrzeitdatentypen und -funktionen.
Neue Datums-/Uhrzeitdaten in SQL Server 2008
In der folgenden Tabelle werden die Datums- und Uhrzeit-Datentypen beschrieben.
SQL Server-Datentyp | BESCHREIBUNG |
---|---|
date |
Der Bereich der gültigen Werte für den date -Datentyp reicht vom 1. Januar 0001 bis zum 31. Dezember 9999 mit einer Genauigkeit von einem Tag. Der Standardwert ist der 1. Januar 1900. Die Speichergröße beträgt 3 Byte. |
time |
Der time -Datentyp speichert reine Uhrzeitwerte im 24-Stunden-Format. Der time -Datentyp hat einen Bereich von 00:00:00.0000000 bis 23:59:59.9999999 mit einer Genauigkeit von 100 Nanosekunden. Der Standardwert ist 00:00:00.0000000 (Mitternacht). Der time -Datentyp unterstützt benutzerdefinierte Sekundenbruchteilgenauigkeit, und die Speichergröße variiert je nach angegebener Genauigkeit zwischen 3 und 6 Bytes. |
datetime2 |
Der Datentyp datetime2 kombiniert den Bereich und die Genauigkeit der Datentypen date und time zu einem einzelnen Datentyp.Die Standardwerte und Formate für Zeichenfolgenliterale sind identisch mit denen, die in den Datentypen date und time definiert sind. |
datetimeoffset |
Der datetimeoffset -Datentyp besitzt alle Funktionen von datetime2 , verfügt darüber hinaus aber auch über eine als Abweichung (Offset) von der koordinierten Weltzeit angegebene Zeitzonenangabe. Der Zeitzonenoffset wird wie folgt dargestellt: [+|-] HH:MM. Bei HH handelt es sich um zwei Ziffern im Bereich von 00 bis 24, die die Anzahl der Stunden im Zeitzonenoffset darstellen. Bei MM handelt es sich um zwei Ziffern im Bereich von 00 bis 59, die die Anzahl der zusätzlichen Minuten im Zeitzonenoffset darstellen. Uhrzeitformate werden mit einer Genauigkeit von bis zu 100 Nanosekunden unterstützt. Das obligatorische Plus- oder Minuszeichen gibt an, ob der Zeitzonenoffset von der UTC (Universal Time Coordinate oder Greenwich Mean Time) addiert oder subtrahiert wird, um die Ortszeit zu erhalten. |
Hinweis
Weitere Informationen über die Verwendung des Type System Version
-Schlüsselworts finden Sie unter ConnectionString.
Datumsformat und Datumsreihenfolge
Wie SQL Server Datums- und Uhrzeitwerte analysiert, hängt nicht nur von der Typsystem- und Serverversion ab, sondern auch von der Standardsprache und den Formateinstellungen des Servers. Eine Datumszeichenfolge, die für die Datumsformate einer Sprache funktioniert, wird möglicherweise nicht erkannt, wenn die Abfrage über eine Verbindung erfolgt, die eine andere Sprach- und Datumsformateinstellung verwendet.
Die Transact-SQL-Anweisung SET LANGUAGE legt implizit das DATEFORMAT fest, das die Reihenfolge der Datumsteile bestimmt. Sie können die Transact-SQL-Anweisung SET DATEFORMAT für eine Verbindung verwenden, um Datumswerte eindeutig zu bestimmen, indem Sie die Datumsteile in der Reihenfolge MTJ, TMJ, JMT, JTM, MJT oder TJM sortieren.
Wenn Sie kein DATEFORMAT für die Verbindung angeben, verwendet SQL Server die der Verbindung zugeordnete Standardsprache. Beispiel: Die Datumszeichenfolge 01/02/03 würde auf einem Server mit der Spracheinstellung „Englisch (USA)“ als MTJ (Januar 2, 2003) und auf einem Server mit der Spracheinstellung „Englisch (UK)“ als TMJ (1. Februar 2003) interpretiert. Das Jahr wird mithilfe der SQL Server-Regel für das Umstellungsjahr bestimmt, die das Umstellungsdatum für die Zuweisung des Jahrhundertwerts definiert. Weitere Informationen finden Sie unter Option für Jahresangaben mit zwei Ziffern.
Hinweis
Das Datumsformat JTM wird bei der Konvertierung aus einem Zeichenfolgenformat in date
, time
, datetime2
oder datetimeoffset
nicht unterstützt.
Weitere Informationen zur Interpretation von Datums- und Zeitdaten in SQL Server finden Sie unter Verwenden von Datums- und Zeitdaten.
Datentypen und Parameter zur Angabe von Datum und Uhrzeit
Die folgenden Enumerationen wurden SqlDbType hinzugefügt, um die neuen Datums- und Uhrzeitdatentypen zu unterstützen.
SqlDbType.Date
SqlDbType.Time
SqlDbType.DateTime2
SqlDbType.DateTimeOffSet
Sie können den Datentyp eines SqlParameter mithilfe einer der voranstehenden SqlDbType-Enumerationen angeben.
Hinweis
Sie können die DbType
-Eigenschaft von SqlParameter
nicht auf SqlDbType.Date
festlegen.
Der Typ eines SqlParameter kann auch generisch angegeben werden, indem die DbType-Eigenschaft eines SqlParameter
-Objekts auf einen bestimmten DbType-Enumerationswert festgelegt wird. Zur Unterstützung der Datentypen datetime2
und datetimeoffset
wurden DbType die im Folgenden aufgeführten Enumerationswerte hinzugefügt:
DbType.DateTime2
DbType.DateTimeOffset
Diese neuen Enumerationen ergänzen die Enumerationen Date
, Time
und DateTime
, die bereits in früheren .NET Framework-Versionen vorhanden waren.
Der .NET Framework-Datenanbietertyp eines Parameterobjekts wird vom .NET Framework-Typ des Werts des Parameterobjekts oder vom DbType
des Parameterobjekts hergeleitet. Es wurden keine neuen System.Data.SqlTypes-Datentypen eingeführt, um die neuen Datums- und Uhrzeitdatentypen zu unterstützen. In der folgenden Tabelle werden die Zuordnungen zwischen den Datums- und Uhrzeitdatentypen von SQL Server 2008 und den CLR-Datentypen beschrieben.
SQL Server-Datentyp | .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 |
SqlParameter-Eigenschaften
In der folgenden Tabelle werden SqlParameter
-Eigenschaften beschrieben, die für Datums- und Uhrzeitdatentypen relevant sind.
Eigenschaft | BESCHREIBUNG |
---|---|
IsNullable | Ruft ab oder legt fest, ob ein Wert NULL sein kann. Wenn Sie den Parameterwert NULL an den Server senden, müssen Sie DBNull anstelle von null (Nothing in Visual Basic) angeben. Weitere Informationen zu NULL-Werten bei Datenbanken finden Sie unter Handling Null Values. |
Precision | Ruft die maximale Anzahl von Stellen ab, die verwendet werden, um den Wert darzustellen, oder legt diese fest. Diese Einstellung wird für Datums -und Uhrzeitdatentypen ignoriert. |
Scale | Ruft die Anzahl der Dezimalstellen für die Auflösung des Uhrzeitteils des Werts für Time , DateTime2 und DateTimeOffset ab, oder legt diese fest. Der Standardwert ist 0, was bedeutet, dass die tatsächliche Skala vom Wert hergeleitet und an den Server gesendet wird. |
Size | Wird für Datums -und Uhrzeitdatentypen ignoriert. |
Value | Ruft den Parameterwert ab oder legt ihn fest. |
SqlValue | Ruft den Parameterwert ab oder legt ihn fest. |
Hinweis
Uhrzeitwerte, die kleiner als 0 oder größer oder gleich 24 Stunden sind, lösen eine ArgumentException aus.
Erstellen von Parametern
Sie können ein SqlParameter-Objekt erstellen, indem Sie dessen Konstruktor verwenden, oder Sie fügen es zu einer SqlCommandParameters-Auflistung hinzu, indem Sie die Add
-Methode der SqlParameterCollection aufrufen. Die Add
-Methode verwendet als Eingabe entweder Konstruktorargumente oder ein vorhandenes Parameterobjekt.
Die nächsten Abschnitte in diesem Thema enthalten Beispiele zum Angeben von Datums- und Uhrzeitparametern. Weitere Beispiele für die Arbeit mit Parametern finden Sie unter Konfigurieren von Parametern und Parameterdatentypen und Parameter von DataAdapter.
Datumsbeispiel
Das folgende Codefragment zeigt, wie ein date
-Parameter angegeben wird.
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"
Uhrzeitbeispiel
Das folgende Codefragment zeigt, wie ein time
-Parameter angegeben wird.
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-Beispiel
Das folgende Codefragment zeigt, wie ein datetime2
-Parameter mit Datums- und Uhrzeitteilen angegeben wird.
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-Beispiel
Das folgende Codefragment zeigt, wie ein DateTimeOffSet
-Parameter mit einem Datum, einer Uhrzeit und dem Zeitzonenoffset 0 angegeben werden kann.
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
Sie können Parameter auch mithilfe der AddWithValue
-Methode von SqlCommand angeben, wie im folgenden Codefragment gezeigt. Die AddWithValue
-Methode ermöglicht jedoch nicht, DbType oder SqlDbType für den Parameter anzugeben.
command.Parameters.AddWithValue(
"@date", DateTimeOffset.Parse("16660902"));
command.Parameters.AddWithValue( _
"@date", DateTimeOffset.Parse("16660902"))
Der @date
-Parameter kann den Datentypen date
, datetime
oder datetime2
auf dem Server zugewiesen werden. Wenn Sie mit den neuen datetime
-Datentypen arbeiten, müssen Sie die SqlDbType-Eigenschaft des Parameters explizit auf den Datentyp der Instanz festlegen. Das Verwenden von Variant oder implizite Bereitstellen von Parameterwerten kann zu Problemen bei der Abwärtskompatibilität der Datentypen datetime
und smalldatetime
führen.
Die folgende Tabelle zeigt, welche SqlDbTypes
von welchen CLR-Typen abgeleitet werden:
CLR-Datentyp | Abgeleiteter SqlDbType |
---|---|
Datetime | SqlDbType.DateTime |
TimeSpan | SqlDbType.Time |
DateTimeOffset | SqlDbType.DateTimeOffset |
Abrufen von Datums- und Uhrzeitdaten
In der folgenden Tabelle werden die Methoden zum Abrufen von Datums- und Uhrzeitwerten in SQL Server 2008 beschrieben.
SqlClient-Methode | BESCHREIBUNG |
---|---|
GetDateTime | Ruft den angegebenen Spaltenwert als DateTime-Struktur ab. |
GetDateTimeOffset | Ruft den angegebenen Spaltenwert als DateTimeOffset-Struktur ab. |
GetProviderSpecificFieldType | Gibt den Typ zurück, der der zugrunde liegende anbieterspezifische Typ des Felds ist. Gibt für neue Datums- und Uhrzeittypen die gleichen Typen wie GetFieldType zurück. |
GetProviderSpecificValue | Ruft den Wert der angegebenen Spalte ab. Gibt für die neuen Datums- und Uhrzeittypen die gleichen Typen wie GetValue zurück. |
GetProviderSpecificValues | Ruft die Werte im angegebenen Array ab. |
GetSqlString | Ruft den Spaltenwert als SqlString ab. Eine InvalidCastException tritt auf, wenn die Daten nicht als SqlString ausgedrückt werden können. |
GetSqlValue | Ruft Spaltendaten als ihren standardmäßigen SqlDbType ab. Gibt für die neuen Datums- und Uhrzeittypen die gleichen Typen wie GetValue zurück. |
GetSqlValues | Ruft die Werte im angegebenen Array ab. |
GetString | Ruft den Spaltenwert als Zeichenfolge ab, wenn „Type System Version“ auf SQL Server 2005 festgelegt ist. Eine InvalidCastException tritt auf, wenn die Daten nicht als Zeichenfolge ausgedrückt werden können. |
GetTimeSpan | Ruft den angegebenen Spaltenwert als TimeSpan-Struktur ab. |
GetValue | Ruft den angegebenen Spaltenwert als zugrunde liegenden CLR-Typ ab. |
GetValues | Ruft Spaltenwerte in einem Array ab. |
GetSchemaTable | Gibt eine DataTable zurück, die die Metadaten des Resultsets beschreibt. |
Hinweis
Die neue Datums- und Uhrzeitwerte für SqlDbTypes
werden nicht für Code unterstützt, der in SQL Server prozessintern ausgeführt wird. Eine Ausnahme wird ausgelöst, wenn einer dieser Typen an den Server übergeben wird.
Angeben von Datums- und Uhrzeitwerten als Literale
Sie können Datums- und Uhrzeitdatentypen angeben, indem Sie eine Vielzahl verschiedener Formate für Literalzeichenfolgen verwenden, die SQL Server dann zur Laufzeit auswertet und in interne Datums-/Uhrzeitstrukturen konvertiert. SQL Server erkennt Datums- und Uhrzeitdaten, die in einfache Anführungszeichen (') eingeschlossen sind. Die folgenden Beispiele veranschaulichen einige Formate:
Alphabetische Datumsformate wie
'October 15, 2006'
.Numerische Datumsformate wie
'10/15/2006'
.Ungetrennte Zeichenfolgenformate wie
'20061015'
, die als 15. Oktober 2006 interpretiert werden, wenn Sie das ISO-Standarddatumsformat verwenden.
Uhrzeitwerte, die kleiner als 0 oder größer oder gleich 24 Stunden sind, lösen eine ArgumentException aus.
SQL Server-Dokumentationsressourcen
Weitere Informationen zur Arbeit mit Datums- und Zeitwerten in SQL Server finden Sie in folgenden Artikeln.
Artikel | BESCHREIBUNG |
---|---|
Datums- und Uhrzeitdatentypen und zugehörige Funktionen (Transact-SQL) | Bietet eine Übersicht über alle Transact-SQL-Datentypen und -Funktionen zur Angabe des Datums und der Uhrzeit. |
Verwenden von Datums- und Uhrzeitdaten | Stellt Informationen zu den Datentypen und Funktionen zur Angabe des Datums und der Uhrzeit sowie Beispiele für deren Verwendung bereit. |
Datentypen (Transact-SQL) | Beschreibt die Systemdatentypen in SQL Server 2008. |