我有一个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
有没有办法,所以如果发生异常,我可以将默认语言设置为 british ,并在SQL SERVER中的END CATCH语句之后执行代码。
我也试过使用ISDATE()方法,但每次它都给我1作为输出,无论 us_english 格式还是英国。
答案 0 :(得分:0)
正如我的评论所指出的,我认为存在一种误解......
我认为,不同的格式并非来自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是正确创建的,那么这应该有效,根本不需要转换。