在sql中暂定日期转换

时间:2010-03-16 09:43:33

标签: xml sql-server-2005 tsql xpath casting

我正在寻找TSQL中的TRYCAST或等效方法/ hack。

在我的情况下,我从xml列中提取一些日期数据。

以下查询抛出“将表达式转换为数据类型datetime的算术溢出错误”。如果在xml中找到的数据片段无法转换为datetime(在这种特定情况下,某些情况下日期为“0001-01-01”)。有没有办法在它发生之前检测到它?

select
      [CustomerInfo].value('(//*:InceptionDate/text())[1]', 'datetime')
  FROM Customers

我试图通过想象的tsql函数TRYCAST(expr, totype, defaultvalue)在伪代码中实现的一个例子:

select
      TRYCAST(
       [CustomerInfo].value('(//*:InceptionDate/text())[1]', 'nvarchar(100)'), 
       datetime, 
       null)
  FROM Customers

1 个答案:

答案 0 :(得分:3)

当节点小于SQL Server允许的最小日期时间时,您可以尝试排除该节点:

SELECT
  [CustomerInfo].value('(//*:InceptionDate/text())[1][.>=''1753-01-01'']', 'datetime')
FROM 
  Customers

这样做的假设较少:

SELECT
  CASE 
    WHEN ISDATE([CustomerInfo].value('(//*:InceptionDate/text())[1]'))
    THEN CONVERT(DATETIME, [CustomerInfo].value('(//*:InceptionDate/text())[1]'))
    ELSE NULL
  END
FROM 
  Customers