如何将DateTime的SQL Server XML类型值(xsi:nil)转换为null

dan*_*die 7 xml sql t-sql sql-server sql-server-2005

有没有办法查询SQL Server XML类型,以便对于一个元素xsi:nil="true",返回null而不是默认的datetime值,这是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')
Run Code Online (Sandbox Code Playgroud)

Value1和Value2都返回1900-01-01 00:00:00.000.有没有办法返回null,相反?没用nullif

gbn*_*gbn 10

"默认"日期时间是由一个空字符串引起的,该字符串为"0",给出01 jan 1900.

所以:整理字符串,然后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)
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用 - 我的 sql 数据类型是 datetime CAST(NULLIF(@data.value('/DOD[1]', 'datetime'), '') AS datetime) (2认同)