如何在SQL Server中将XML字符串值转换为datetime

时间:2016-06-22 23:31:07

标签: sql-server xml datetime

我有下面的代码,它从SQL Server中的XML字符串中选择一个日期值。字符串值返回ddmmyy中的格式,我需要将其转换为T-SQL datetime类型,然后再将其保存到表中。

SELECT TOP 1
    list.n.value('(DOB/@value)[1]', 'datetime') AS 'DOB'
FROM 
    @ResultXML.nodes('/Variables') AS list(n)

XML文件:

<Variables>
    <DOB>111290</DOB>
</Variables>

2 个答案:

答案 0 :(得分:1)

您可以这样尝试:

DECLARE @XML XML=
'<Variables>
    <DOB>111290</DOB>
</Variables>';

SELECT CONVERT(DATETIME,STUFF(STUFF(@XML.value('(/Variables/DOB)[1]','varchar(max)'),3,0,'/'),6,0,'/'),3)

首先,您使用两次STUFF获取11/12/90代替111290,而不是使用3将此转换为日期时间(或任何其他适合格式:使用.为德语,-为英国......)DataContext.GetCommand

最好的是,正确存储日期和时间值。在XML中,这应该是ISO8601,这意味着yyyy-MM-ddyyyy-MM-ddThh:mm:ss More details on CAST and CONVERT

答案 1 :(得分:0)

如果是SQL 2012 +

示例

Declare @String varchar(25)= '111290'
-- If MMDDYY
Select DATEFROMPARTS(iif(Right(90,2)>25,'19'+Right(90,2),'20'+Right(90,2)),Left(@String,2),Substring(@String,3,2))

-- If DDMMYY
Select DATEFROMPARTS(iif(Right(90,2)>25,'19'+Right(90,2),'20'+Right(90,2)),Substring(@String,3,2),Left(@String,2))

Returns:  1990-11-12
Returns:  1990-12-11