sql - 如何转换 SQL Server XML 类型值 (xsi :nil) of DateTime to null

标签 sql sql-server xml sql-server-2005 tsql

有没有一种方法可以查询 SQL Server XML 类型,以便对于具有 xsi:nil="true" 的元素,返回 null 而不是默认日期时间值,即 1900-01 -01 00:00:00.000?

这是一段代码

declare @data xml
set @data = 
    '<DOD   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
            xsi:nil="true" />'
select  Value1 = @data.value('/DOD[1]', 'datetime'),
        Value2 = IsNull(@data.value('/DOD[1]', 'datetime'), 'NOT NULL?'),
        Value3 = nullif(@data.value('/DOD[1]', 'datetime'), '1900-01-01')

Value1 和 Value2 都返回 1900-01-01 00:00:00.000。 有没有办法返回一个空值呢?不使用 nullif

最佳答案

“默认”日期时间是由强制转换为“零”的空字符串引起的,该字符串给出 1900 年 1 月 1 日。

所以:整理字符串,然后 CAST

declare @data xml

set @data = 
        '<DOD   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                        xsi:nil="true" />'

select
    Value1 = CAST(NULLIF(@data.value('/DOD[1]', 'varchar(30)'), '') AS datetime)

关于sql - 如何转换 SQL Server XML 类型值 (xsi :nil) of DateTime to null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1202496/

相关文章:

sql - 如何在 Power Designer 15 中从 ER 图中生成 SQL 表?

c# - 如何在 SQLite 中存储 boolean 值

asp.net - 由于检索用户的本地应用程序数据路径失败,无法生成 SQL Server 的用户实例

php - PHP5中不同的XML解析库有什么区别?

javascript - 谷歌应用脚​​本: Parsing XML results in error: "Cannot find function getChildren in object"

mysql - 根据数字匹配将两个表合并为第三个表

mysql - SQL查询连接两个没有重复值的表?

java - 使用命名 JDBC 参数调用存储过程会引发异常

c# - 使用 SQL Server 数据库中的数据在文本框中自动完成

xml - 查找单个标签内n个相同的内部标签内容