Using XML with time, date, datetime2, and datetimeoffset Data Types

Istniejący dokument schematu XML SqlTypes.xsd opisano typy schematów W3C XML, które są używane do opisywania SQL Server typy danych w FOR XML i HTTP/protokołu SOAP.

SqlTypes.xsd dokument schematu

Obszar nazw schematu XML 2004 został rozszerzony mogą być następujące SQL Server typy danych:czas, Data, datetime2, anddatetimeoffset.

.NET framework System.Data.SqlDbType

Następujące wyliczenia są dodawane do SqlDbTypeEnum.

Typ programu SQL Server

.NET framework SqlDbType

date

Date

time

Time

datetime2

LargeDateTime

datetimeoffset

DateTimeWithTimeZone

Z pełną SqlDbTypeEnum przedstawia się następująco:

  <xsd:simpleType name="sqlDbTypeEnum">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="BigInt" /> 
      <xsd:enumeration value="Binary" /> 
      <xsd:enumeration value="Bit" /> 
      <xsd:enumeration value="Char" /> 
      <xsd:enumeration value="Date" />
      <xsd:enumeration value="DateTime" /> 
      <xsd:enumeration value="DateTimeWithTimeZone" />
      <xsd:enumeration value="Decimal" /> 
      <xsd:enumeration value="Float" /> 
      <xsd:enumeration value="Image" /> 
      <xsd:enumeration value="Int" /> 
      <xsd:enumeration value="LargeDateTime" />
      <xsd:enumeration value="Money" /> 
      <xsd:enumeration value="NChar" /> 
      <xsd:enumeration value="NText" /> 
      <xsd:enumeration value="NVarChar" /> 
      <xsd:enumeration value="Real" /> 
      <xsd:enumeration value="SmallDateTime" /> 
      <xsd:enumeration value="SmallInt" /> 
      <xsd:enumeration value="SmallMoney" /> 
      <xsd:enumeration value="Text" /> 
      <xsd:enumeration value="Time" />
      <xsd:enumeration value="Timestamp" /> 
      <xsd:enumeration value="TinyInt" /> 
      <xsd:enumeration value="Udt" /> 
      <xsd:enumeration value="UniqueIdentifier" /> 
      <xsd:enumeration value="VarBinary" /> 
      <xsd:enumeration value="VarChar" /> 
      <xsd:enumeration value="Variant" /> 
      <xsd:enumeration value="Xml" /> 
    </xsd:restriction>
  </xsd:simpleType>

Opis i mapowania programu SQL Server Data i typy danych czas

Poniższa tabela zawiera listę definicji schematów dla data i czas typy danych, które są nowe w SQL Server 2008.

Typ danych

Definicja schematu

datetime

<xsd:simpleType name="datetime">
  <xsd:restriction base="xsd:dateTime">
....<xsd:pattern value="((000[1-9])|(00[1-9][0-9])|(0[1-9][0-....9]{2})|([1-9][0-9]{3}))-((0[1-9])|(1[012]))-((0[1-9])|([12][0-....9])|(3[01]))T(([01][0-9])|(2[0-3]))(:[0-5][0-9]){2}(\.[0-....9]{2}[037])?" /> 
    <xsd:maxInclusive value="9999-12-31T23:59:59.997" /> 
    <xsd:minInclusive value="1753-01-01T00:00:00.000" /> 
  </xsd:restriction>
</xsd:simpleType>

smalldatetime

<xsd:simpleType name="smalldatetime">
  <xsd:restriction base="xsd:dateTime">
    <xsd:pattern value="((000[1-9])|(00[1-9][0-9])|(0[1-9][0-9]{2})|([1-9][0-9]{3}))-((0[1-9])|(1[012]))-((0[1-9])|([12][0-9])|(3[01]))T(([01][0-9])|(2[0-3]))(:[0-5][0-9])(:00)" /> 
    <xsd:maxInclusive value="2079-06-06T23:59:00" /> 
    <xsd:minInclusive value="1900-01-01T00:00:00" /> 
  </xsd:restriction>
</xsd:simpleType>

date

<xsd:simpleType name="date">
  <xsd:restriction base="xsd:date">
    <xsd:pattern value="((000[1-9])|(00[1-9][0-9])|(0[1-9][0-9]{2})|([1-9][0-9]{3}))-((0[1-9])|(1[012]))-((0[1-9])|([12][0-9])|(3[01]))" /> 
    <xsd:maxInclusive value="9999-12-31" /> 
    <xsd:minInclusive value="0001-01-01" /> 
  </xsd:restriction>
</xsd:simpleType>

time

xsd:simpleType name="time">
  <xsd:restriction base="xsd:time">
    <xsd:pattern value="(([01][0-9])|(2[0-3]))(:[0-5][0-9]){2}(\.[0-9]+)?" /> 
    <xsd:annotation>
    <xsd:minInclusive value="00:00:00" /> 
    </xsd:annotation>
  </xsd:restriction>
</xsd:simpleType>

datetime2

<xsd:simpleType name="datetime2">
  <xsd:restriction base="xsd:dateTime">
    <xsd:pattern value="((000[1-9])|(00[1-9][0-9])|(0[1-9][0-9]{2})|([1-9][0-9]{3}))-((0[1-9])|(1[012]))-((0[1-9])|([12][0-9])|(3[01]))T(([01][0-9])|(2[0-3]))(:[0-5][0-9]){2}(\.[0-9]+)?" /> 
<xsd:annotation>
  <xsd:minInclusive value="0001-01-01T00:00:00" />
</xsd:annotation>
  </xsd:restriction>
</xsd:simpleType>

datetimeoffset

<xsd:simpleType name="DATETIMEOFFSET">
  <xsd:restriction base="xsd:dateTime" />
     <xsd:pattern value="((000[1-9])|(00[1-9][0-9])|(0[1-9][0-9]{2})|([1-9][0-9]{3}))-((0[1-9])|(1[012]))-((0[1-9])|([12][0-9])|(3[01]))T(([01][0-9])|(2[0-3]))(:[0-5][0-9]){2}(\.[0-9]+)?(([\+|\-]((0[0-9])|(1[0-2]))(:[0-5][0-9]))|(\+13(:[0-5][0-9])(:[0-5][0-9]))|\+14:00|Z)"(([\+|\-]((((0[0-9])|(1[0-3]))(:[0-5][0-9]))|14:00))|Z)" /> 
    <xsd:minInclusive value="0001-01-01T00:00:00Z" /> 
  </xsd:restriction>
</xsd:simpleType>

Katalogi system obszar nazw schematu XML

Nowa data i czas informacji o typie, który jest dodawany do nazw istniejących schematów XML 2004 została wpisana do i może być kierowane kwerendy z następujących katalogów systemu schematu XML:

  • Sys.xml_schemla_namespaces

  • Sys.xml_schema_collections

  • Sys.xml_schema_components

XML value() metoda

Kod XML value() metoda daje możliwość wskazania SQL Server Typ danych wartości wyodrębnione. Oznacza to, konwersja wartości XSD SQL Server wartość dla określonego typu. The SQL Server data and czas types are supported for the following casts:

  • Dowolne wystąpienie wartość XQuery, który reprezentuje data mogą być rzutowane na date, datetime, smalldatetime, datetime2, datetimeoffset, lub dowolnego znaku typu w SQL Server.

  • Dowolne wystąpienie wartość XQuery, który reprezentuje czas mogą być rzutowane na time, datetime, smalldatetime, datetime2, datetimeoffset lub typ znaku w SQL Server.

  • Wszystkie wystąpienie wartości XQuery reprezentująca data, czas i bez strefę czasową, mogą być rzutowane na datetime, smalldatetime, datetimeoffet (z przesunięcie strefy 0) date (składnik czasu są opuszczane), time (część data jest usunięte), datetime2, lub typ znaku w SQL Server.

  • Wszystkie wystąpienie wartości XQuery reprezentującą data i czas, zawierający przesunięcia Z lub od strefy czasowej (+ |-gg: mm) mogą być rzutowane na datetime (UTC bez przesunięcie strefy) smalldatetime (UTC bez przesunięcie strefy) datetimeoffet, date (czasu następowało przesunięcie strony i strefy) datetime2 (UTC bez przesunięcie strefy) time (opuszczone strony i strefy przesunięcie data), lub dowolnego znaku typu w SQL Server.

  • Komunikat o błędzie rzutowania prowadzi do powstania stanu przepełnienie lub poza zakres zostaną zwrócone.

  • Jeśli data, czas lub data, z czas wartość (lub bez czas strefy) jest bardziej precyzyjnie (ułamków sekund) niż typ miejsce docelowe ułamków sekund większej precyzji zostaną zaokrąglone.

  • Format data dowolne wystąpienie wartość XML, który reprezentuje date Typ danych jest określany przez USTAWIANIE JĘZYKA and DATEFORMAT USTAWIANIE ustawienia.

Przykład

W poniższym przykładzie użyto value() Metoda.

DECLARE @myDoc xml;
DECLARE @OrderID int;
DECLARE @OrderDate date;
DECLARE @OrderTime time;
DECLARE @OrderDateTime datetimeoffset;
SET @myDoc = '<Root>
<OrderDescription OrderID="1" OrderDate="1999-12-20" OrderTime="13:40:58.47786" OrderDateTime="1999-12-20 13:40:58.123-05:00">
<Features>
  <Warranty>1 year parts and labor</Warranty>
  <Maintenance>3 year parts and labor extended maintenance is available</Maintenance>
</Features>
</OrderDescription>
</Root>';

SET @OrderID =  @myDoc.value('(/Root/OrderDescription/@OrderID)[1]', 'int');
SET @OrderDate =  @myDoc.value('(/Root/OrderDescription/@OrderDate)[1]', 'date');
SET @OrderTime =  @myDoc.value('(/Root/OrderDescription/@OrderTime)[1]', 'time');
SET @OrderDateTime =  @myDoc.value('(/Root/OrderDescription/@OrderDateTime)[1]', 'datetimeoffset');

SELECT @OrderID,@OrderDate,@OrderTime,@OrderDateTime;
--Returns: 1           1999-12-20 13:40:58.4778600 1999-12-20 13:40:58.1230000 -0

Pseudofunctions XQuery

sql:column() i sql:variable() rozpoznaje date, time, datetime2, a datetimeoffset typy danych.

Mapowanie typu XSD w programie SQL Server

Dla sql:variable() i sql:column(), wartość Xquery, która jest przekształcana z typu podstawowego Xquery SQL Server wartość jest określana przez SQL Server Mapowanie typu XSD semantyki. To mapowanie semantycznych jest zdefiniowany w rozszerzonych obszar nazw schematu XML.

Typ programu SQL Server

Typ XSD

date

xsd:data

time

xsd:czas

datetime2

xsd:DateTime

datetimeoffset

xsd:DateTime

Mapowanie typu formatu magazynu XML

W SQL Server 2008, format przechowywania dla wystąpienie XML Data i godzina zmiany typów za pomocą nowego SQL Server typy daty i godziny. W poniższej tabela przedstawiono XSD do SQL Server Mapowanie typu danych. To mapowanie ustali również operacji semantycznej między wyniki zwrotu sql:column() i sql:variable() i XML data i czas wystąpienia.

Typ XSD

Mapowanie typu programu SQL Server magazynu XML z TZ

Mapowanie typu programu SQL Server magazynu XML bez TZ

xs:date

datetimeoffset

date

xs:time

datetimeoffset

datetimeoffset

xs:dateTime

datetimeoffset

datetime2

NA języku XML i klauzul XMLSCHEMA

SQL Server kolumny, które są zgłaszane przez date, time, datetime2, a datetimeoffset typy danych są obsługiwane, gdy klauzula FOR XML lub XMLSCHEMA jest określona w instrukcja SELECT.

Format danych wyjściowych

Następujące tabela list FOR XML formatów date, time, datetime2, a datetimeoffset typy danych.

Typ programu SQL Server

DO XML wyjściowy format

date

RRRR MM-DD

time

hh:mm:ss[.nnnnnnn]

datetime2

YYYY-MM-DDThh:mm:ss[.nnnnnnn]

datetimeoffset

YYYY-MM-DDThh:mm:ss[.nnnnnnn] [+|-]hh:mm

Przykład

W poniższym przykładzie użyto date, time, adatetimeoffset typy z FOR XML.

CREATE TABLE T1 
    ( 
    dt date, tm time, dtz datetimeoffset
    );
GO
INSERT INTO T1 
VALUES('1996-12-16', '12:30:47.7867', '1996-12-16 12:30:47.7867-05:00');

SELECT dt FROM T1 FOR XML AUTO;
--Returns:
--XML_F52E2B61-18A1-11d1-B105-00805F49916B
------------------------------------------
--<t1 dt="1996-12-16"/>

SELECT tm FROM T1 FOR XML AUTO;
--Returns:
--XML_F52E2B61-18A1-11d1-B105-00805F49916B
------------------------------------------
--<t1 tm="12:30:47.7867"/>

SELECT dtz FROM T1 FOR XML AUTO;
--Returns:
--XML_F52E2B61-18A1-11d1-B105-00805F49916B
------------------------------------------
--<t1 dtz="1996-12-16T12:30:47.7867 -05:00"/>

Schemat wbudowany XSD z klauzula XMLSCHEMA

Po zastosowaniu klauzula XMLSCHEMA z klauzula FOR XML wygenerowanego schematu XSD w wierszu poniżej metody ograniczeń wzorca, które są zdefiniowane dla każdej nowej data i czas typów w rozszerzonych istniejących nazw schematu XML.

(OPENXML) funkcja

Poniższa tabela zawiera listę formatów wejściowych OPENXML dla date, time, datetime2, a datetimeoffset typy danych.

Typ programu SQL Server

DO XML wyjściowy format

date

RRRR MM-DD

time

hh:mm:ss[.nnnnnnn]

datetime2

YYYY-MM-DDThh:mm:ss[.nnnnnnn]

datetimeoffset

YYYY-MM-DDThh:mm:ss[.nnnnnnn][+|-]hh:mm

Przykład

W poniższym przykładzie użyto OPENXML z datetimeoffset Typ danych.

CREATE TABLE T1 
    ( 
    dt date, tm time(7), dtz datetimeoffset(7)
    )
GO
DECLARE @docHandle int;
DECLARE @xmlDocument nvarchar(max); -- or xml type
SET @xmlDocument = N'<ROOT>
<T1 dt="2000-08-25" tm="12:30:47.1234567" dtz="2000-08-25T05:22:36.1234567-05:00"/>
</ROOT>';

EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlDocument;

-- Use OPENXML to provide rowset that consists of customer data.
INSERT T1
SELECT * 
FROM OPENXML(@docHandle, N'/ROOT/T1') 
    WITH T1;

-- Using OPENXML in a SELECT statement
SELECT * FROM OPENXML(@docHandle, N'/ROOT/T1') WITH (dt date , tm time, dtz datetimeoffset);
EXEC sp_xml_removedocument @docHandle 

See Also

Concepts