我有下面的代码,它从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>
答案 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-dd
或yyyy-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