我通过xml接收一些要插入关联SQL表的数据。我用来插入数据的方法是在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)
我插入的数据库中的字段是日期时间字段
问题:
我想将XML中收到的日期(即 2012-02-03T13:00:00 + 13:00 )插入到我的SQL数据库的日期时间字段中。反正有没有在SQL中很好地转换它?
答案 0 :(得分: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