xml - sql中的暂定日期转换

标签 xml sql-server-2005 t-sql xpath casting

我正在寻找 TSQL 中的 TRYCAST 或等效方法/黑客之类的东西。

就我而言,我从 xml 列中提取一些日期数据。

以下查询抛出“将表达式转换为数据类型日期时间时发生算术溢出错误”。如果在 xml 中找到的数据无法转换为日期时间(在这种特定情况下,日期在某些情况下为“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

最佳答案

当节点小于 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

关于xml - sql中的暂定日期转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2453262/

相关文章:

sql - 从自定义电子邮件表发送电子邮件的代理作业

python - 在python中将http响应Content-Type设置为 "xml"

java - 将 TextView 从 xml 加载到 TextSwitcher

xml - XPath 和 Powershell - 默认命名空间

sql-server - 无法更新包含特殊字符的 varchar 列

c# - 如何使用 NHibernate QueryOver 计算给定出生日期的年龄

xml - 使用 DTD,是否可以声明一个允许任何 XML 内容的元素?

sql-server - 有没有办法在 SQL Server 2005 中设置小数计算的默认精度?

sql-server - SQL Server 在选择/更新或多选择之间死锁

sql - 如何通过多个分组按日期运行累积总计