2016-06-22 63 views
0

我有下面的代碼,它從SQL Server中的XML字符串中選擇一個日期值。該字符串值在ddmmyy中返回格式,我需要將其轉換爲T-SQL datetime類型,然後將其保存到表中。如何在SQL Server中將XML字符串值轉換爲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

可能重複[將SQL Server中的varchar轉換爲datetime](http://stackoverflow.com/questions/1509977/convert-varchar-into-datetime-in -sql-server) – artm

+0

這個答案是針對另一種格式'mmddyy' –

回答

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將其轉換爲日期時間(或任何其他配件格式:使用.德國,-英國...)More details on CAST and CONVERT

最佳是爲了正確存儲日期和時間值。在XML內,這應該是ISO8601,這意味着yyyy-MM-ddyyyy-MM-ddThh:mm:ssMore details on ISO8601

+1

謝謝。我從類似於你的以下鏈接中得到了答案:http://stackoverflow.com/a/13512238/475709 –

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 
相關問題