4

関連するSQLテーブルに挿入されるデータをxml経由で受信しています。私がデータを挿入するために使用している方法は、SQLでXMLをクエリし、必要に応じて一括挿入を行うことです。

私が抱えている問題は、日付が有効な日付として認識されないため、常にデフォルトの日付に戻ることです。

ここに、提供された日付を含むXMLのスニペットがあります

<Upload xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <DeviceID>0008E02B66DD_</DeviceID>
  <DeviceType>03.20</DeviceType>
  <FarmID>2</FarmID>
  <UploadDate>0001-01-01T00:00:00</UploadDate>
  <Sessions>
    <SessionID>99</SessionID>
    <RecordedDate>2012-02-03T13:00:00+13:00</RecordedDate>
    <Readings />
  </Sessions>

...

これがそれを処理する私のSQLコードのスニペットです

Select
(CASE 
 WHEN ISDATE(s.value('(RecordedDate)[1]', 'varchar(50)')) = 1 THEN s.value('(RecordedDate)[1]', 'varchar(50)')
 ELSE @UploadDate
 END) DateOfMeasurement
INTO #Session
FROM
@XMLData.nodes('/Upload') AS Upload(u)
CROSS APPLY
u.nodes('./Sessions') Sessions(s)
  • 注:@UploadDateは、実際にはSQL getDate()からの値、つまり私のデフォルトです

これを挿入しているデータベースのフィールドは日時フィールドです

質問:

XMLで受信した日付、つまり2012-02-03T13:00:00 + 13:00をSQLデータベースの日時フィールドに挿入したいと思います。これをSQLでうまく変換する方法はありますか?

4

1 に答える 1

5
declare @XMLData xml = '
<Upload xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <DeviceID>0008E02B66DD_</DeviceID>
  <DeviceType>03.20</DeviceType>
  <FarmID>2</FarmID>
  <UploadDate>0001-01-01T00:00:00</UploadDate>
  <Sessions>
    <SessionID>99</SessionID>
    <RecordedDate>2012-02-03T13:00:00+13:00</RecordedDate>
    <Readings />
  </Sessions>
</Upload>';

select T.N.value('substring((RecordedDate/text())[1], 1, 19)', 'datetime'),
       T.N.value('(RecordedDate/text())[1]', 'datetime'),
       T.N.value('(RecordedDate/text())[1]', 'datetimeoffset')
from @XMLData.nodes('/Upload/Sessions') as T(N);

結果:

2012-02-03 13:00:00.000 
2012-02-03 00:00:00.000 
2012-02-03 13:00:00.0000000 +13:00
于 2013-02-04T22:57:04.753 に答える