Aracılığıyla paylaş


Saat, tarih, datetime2 ve datetimeoffset veri türleri xml kullanma

Varolan xml şeması belgesi sqltypes.xsd açıklamak için kullanılan W3C xml şema türlerini açıklar SQL Server veri türü için xml ve http / soap.

SqlTypes.xsd şema belgesi

2004 xml şema ad alanı aşağıdakileri içerecek şekilde genişletilmiş SQL Server veri türleri: saat, Tarih, datetime2, ve datetimeoffset.

..NET Framework System.Data.SqlDbType

Aşağıdaki numaralandırma eklenen SqlDbTypeEnum.

sql Server türü

.net Framework SqlDbType

date

Date

time

Time

datetime2

LargeDateTime

datetimeoffset

DateTimeWithTimeZone

Tam SqlDbTypeEnum aşağıdaki gibidir:

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

Açıklama ve sql Server tarih ve saat veri türlerini eşleştirme

Aşağıdaki tablo de yeni tarih ve saat veri türleri için şema tanımlarını listeler SQL Server 2008.

Veri türü

Şema tanımı

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>

xml şema ad alanı sistem kataloglar

Yeni tarih ve saat varolan eklenen bilgileri yazın 2004 xml şema ad alanı için doldurulur ve aşağıdaki xml şema belirli sistem kataloglarından sorgulanan:

  • Sys.xml_schemla_namespaces

  • Sys.xml_schema_collections

  • Sys.xml_schema_components

xml value() yöntemi

xml value() yöntem belirtmek için bir yol sağlar SQL Server veri türünü ayıklanan değer.Bu xsd değere dönüştürme anlamına gelir bir SQL Server değeri için belirtilen türü.The SQL Server date and time types are supported for the following casts:

  • İçine tarih gösteren XQuery değer örnek artığını bir date, datetime, smalldatetime, datetime2, datetimeoffset, ya da herhangi karakter türü SQL Server.

  • Gösteren XQuery değer örnek bir saat içine artığını time, datetime, smalldatetime, datetime2, datetimeoffset veya herhangi bir karakter türünü SQL Server.

  • Halinde olan saat ve saat dilimi olmayan tarih gösteren XQuery değer örnek artığını datetime, smalldatetime, datetimeoffet (0 bölge uzaklık) ile date (saat bölümü bırakılan), time (tarih bölümü bırakılan), datetime2, veya herhangi bir karakter türünü SQL Server.

  • z veya saat dilimi uzaklığı olan saat ile tarih gösteren XQuery değer örnek (+ |-ss: dd) içine artığını datetime (utc bölge uzaklık olmadan), smalldatetime (utc bölge uzaklık olmadan), datetimeoffet, date (süresi bölümü ve bölge uzaklık bırakılan), datetime2 (utc bölge uzaklık olmadan), time (tarih bölümü ve bölge uzaklık bırakılan), veya herhangi karakter türü SQL Server.

  • Cast taşma veya aralık dışı bir durumu müşteri adayları ise bir hata iletisi döndürülür.

  • Tarih, saat veya tarih zaman değeri (ile veya olmadan saat dilimi) ile hedef türü'den daha fazla duyarlılık (Kesirli saniye) varsa, daha büyük Kesirli saniye duyarlık yuvarlanır.

  • Herhangi bir xml değeri tarih biçimi örnek temsil eden bir date veri türü tarafından belirlenir Dil ve set VBLONGDATE ayarlar.

Örnek

Aşağıdaki örnek value() yöntem.

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

XQuery Pseudofunctions

sql:column()and sql:variable() recognize the date, time, datetime2, and datetimeoffset data types.

sql Server'a xsd türü eşleştirmesi

İçin sql:variable() ve sql:column(), dan dönüştürülmüş Xquery değer Xquery temel türü SQL Server değer tarafından belirlenir SQL Server anlamsal xsd türü eşlemesi için. Anlamsal Bu eşleme tanımlanmış genişletilmiş xml şema ad alanı.

sql Server türü

xsd türü

date

xsd:tarih

time

xsd:saat

datetime2

xsd:DateTime

datetimeoffset

xsd:DateTime

xml depolama biçimi türü eşleştirmesi

De SQL Server 2008, depolama biçimi kullanarak yeni tarih ve saat türleri değişiklikleri xml örnek için SQL Server Tarih ve saat türleri.Aşağıdaki tablo için xsd gösterir SQL Server veri türü eşleştirme. Bu eşleştirme işlemi iade sonuçlarını arasında anlamsal de belirleyecek sql:column() ve sql:variable() ve xml tarih ve saat örnekleri.

xsd türü

xml depolama sql Server türü eşleştirmesi tz ile

xml depolama sql Server türü eşleştirmesi tz olmadan

xs:date

datetimeoffset

date

xs:time

datetimeoffset

datetimeoffset

xs:dateTime

datetimeoffset

datetime2

xml ve xmlschema yan tümceleri için

SQL Servertarafından bildirilen sütunlar date, time, datetime2, ve datetimeoffset veri türleri desteklenir, for xml veya xmlschema yan tümce tümce tümce belirtilen deyim.

Çıktı biçimi

Aşağıdaki tablo listeleri için xml çıktı biçimleri için date, time, datetime2, ve datetimeoffset veri türü.

sql Server türü

xml için çıktı biçimi

date

YYYY-AA-GG

time

hh:mm:ss[.nnnnnnn]

datetime2

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

datetimeoffset

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

Örnek

Aşağıdaki örnek date, time, vedatetimeoffset türleri ile 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"/>

xsd satır içi şema xmlschema yan tümcesi ile birlikte

Oluşturulan xsd satır içi şema for xml yan tümce tümce tümce ile xmlschema yan tümce tümce tümce uygulandığında, her yeni tarih ve saat türleri genişletilmiş varolan xml şema ad alanı için tanımlanmış desen kısıtlama yöntemleri takip eder.

openxml () işlevi

Aşağıdaki tablo için openxml giriş biçimlerini listeler date, time, datetime2, ve datetimeoffset veri türü.

sql Server türü

xml için çıktı biçimi

date

YYYY-AA-GG

time

hh:mm:ss[.nnnnnnn]

datetime2

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

datetimeoffset

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

Örnek

Aşağıdaki örnek OPENXML ile datetimeoffset veri türü.

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 

Ayrıca bkz.

Kavramlar