【问题标题】:How to handle MIN date in XML Select query如何在 XML Select 查询中处理 MIN 日期
【发布时间】:2014-05-11 05:37:22
【问题描述】:

我有保存 XML 数据的 XML 类型变量,我想从 XML 中检索数据,一切正常,但是当日期字段的 MIN 日期值 (0001-01-01T00:00:00) 比它给出的错误时。有没有办法消除这个错误?

错误信息

The conversion of a datetimeoffset data type to a datetime data type resulted in an out-of-range value.

--Giving Error
DECLARE @tmpXML XML
SET @tmpXML ='<FormSurveyorNoteXML><FormSurveyorNoteInfo><SurveyDate>2014-05-11T00:00:00+05:30</SurveyDate><InformationDate>0001-01-01T00:00:00</InformationDate></FormSurveyorNoteInfo></FormSurveyorNoteXML>'

SELECT  
                        T1.TR1.value('InformationDate [1]', 'datetime'),
                        T1.TR1.value('SurveyDate [1]', 'datetime')                      
FROM   @tmpXML.nodes('/FormSurveyorNoteXML/FormSurveyorNoteInfo') AS T1(TR1)

--Working Perfect, when date is not MIN
DECLARE @tmpXML1 XML
SET @tmpXML1 ='<FormSurveyorNoteXML><FormSurveyorNoteInfo><SurveyDate>2014-05-11T00:00:00+05:30</SurveyDate><InformationDate>1753-01-01T00:00:00</InformationDate></FormSurveyorNoteInfo></FormSurveyorNoteXML>'

SELECT  
                        T1.TR1.value('InformationDate [1]', 'datetime'),
                        T1.TR1.value('SurveyDate [1]', 'datetime')                      
FROM   @tmpXML1.nodes('/FormSurveyorNoteXML/FormSurveyorNoteInfo') AS T1(TR1)

如果您对处理 XML Select 中的 MIN 日期问题有任何建议或意见,请告诉我。

谢谢 苏雷什

【问题讨论】:

  • 为什么你认为0001-01-01T00:00:00是一个空值?
  • Mikael,感谢您的纠正,是的,我认为它不是 NULL,而是它的最小日期范围。

标签: sql xml sql-server-2008 sqlxml


【解决方案1】:

回答我自己的问题,我发现解决方案必须使用 datetime2 而不是 datetime,因为 datetime2 的日期范围更大。

SELECT  
                        T1.TR1.value('InformationDate [1]', 'datetime2'),
                        T1.TR1.value('SurveyDate [1]', 'datetime')                      
FROM   @tmpXML.nodes('/FormSurveyorNoteXML/FormSurveyorNoteInfo') AS T1(TR1)

【讨论】:

    猜你喜欢
    • 2016-03-18
    • 2022-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多