我有一个XML数据,其中Date格式更改为yyyy-dd-MM(T)HH:mm:ss,有时又更改为yyyy-MM-dd(T)HH:mm:ss。
在解析XML时,我不确定如何处理这种情况,因为我的SQL Server默认语言是Us_english。
如果我在SQL SERVER中使用BEGIN TRY AND CATCH语句,并且在分析数据时发生错误,则PROC的执行将停止。
代码样例
BEGIN TRY
Select Cast(Replace(C.H.value('SameDateColumn[1]','nvarchar(20)'),'T',' ') as Datetime) as 'DateHistory'
from @XMLIN.nodes('//HeaderT') C(H);
set language Us_english
END TRY
BEGIN CATCH
set language british
END CATCH
有什么办法,所以如果发生异常,我可以将默认语言设置为英国语,并在SQL SERVER中的END CATCH语句之后执行代码。
我也尝试过使用ISDATE()方法,但是每次它给我1作为输出时,无论us_english格式还是british。
正如我在评论中指出的那样,我认为存在某种误解...
我认为,不同的格式不是来自XML中的错误数据,而是由于您尝试在不同系统中转换内容而导致的。
您读取的日期是这样的:
Select Cast(Replace(C.H.value('SameDateColumn[1]','nvarchar(20)'),'T',' ') as Datetime) as 'DateHistory'
from @XMLIN.nodes('//HeaderT') C(H);
这意味着:您阅读的日期内将XML作为文本(nvarchar(20)
现在更换“T”,然后你施放此字符串到,DateTime
这最后一步是根据你的系统的培养和使用的语言甚至是依赖。从用户的登录名!。
如果一切顺利的正确途径,任何日期内的XML应该是ISO8601,并期待这样的:
2016-04-21T15:21:00
尝试像这样读取日期:
Select C.H.value('SameDateColumn[1]','datetime') as 'DateHistory'
from @XMLIN.nodes('//HeaderT') C(H);
如果XML创建正确,则应该可以正常工作,根本不需要转换。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句