使用DateTime列的CASE语句

Luc*_*tos 3 sql t-sql

我的查询中有一个datetime列,我想在此查询中执行CASE.

如果DateDelivered列不为null,则显示日期,否则,显示字符串'Pendent'我该怎么做?

CASE WHEN DateDelivered IS NOT NULL THEN DateDelivered ELSE 'Pendent' END AS DateDelivered 2
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误

Conversion failed when converting date and/or time from character string.
Run Code Online (Sandbox Code Playgroud)

整个查询

SELECT  San_Imovel.Imovel_Id ,
        San_Chave.DataHoraPegou ,
        CASE WHEN San_Chave.DateDelivered IS NOT NULL THEN San_Chave.DateDelivered
             ELSE ISNULL(CAST(San_Chave.DateDelivered AS VARCHAR), 'Pendent')
        END AS DateDelivered2 ,
        San_Usuario.NomeCompleto + ' - ' + sc.Apelido AS Nome ,
        San_Cliente.NomeCompleto AS NomeCliente ,
        San_Credenciada.Apelido ,
        San_Cliente.Cliente_Id ,
        San_ChaveImovel.QuantidadeChave
FROM    San_ChaveImovel
        JOIN San_Chave ON San_ChaveImovel.Chave_Id = San_Chave.Chave_Id
        JOIN San_Credenciada ON San_Chave.Credenciada_Id = San_Credenciada.Credenciada_Id
        JOIN San_Imovel ON San_ChaveImovel.Imovel_Id = San_Imovel.Imovel_Id
        JOIN San_Usuario ON San_Chave.Usuario_Id_Responsavel = San_Usuario.Usuario_Id
        JOIN San_Credenciada sc ON San_Usuario.Credenciada_Id = sc.Credenciada_Id
        JOIN San_Cliente ON San_Chave.Cliente_Id = San_Cliente.Cliente_Id  
Run Code Online (Sandbox Code Playgroud)

zim*_*nen 6

您正在尝试将'Pendent'转换为DateTime,因为它会将所有数据转换为相同的数据类型.此外,如果您只是检查NULL,则可以使用ISNULL或COALESCE.试试这个:

ISNULL(CAST(DateDelivered AS VARCHAR), 'Pendent')
Run Code Online (Sandbox Code Playgroud)

您还可以指定DateDelivered的格式:

ISNULL(CONVERT(VARCHAR, DateDelivered, 101), 'Pendent')
Run Code Online (Sandbox Code Playgroud)

在此处查看101的更多选项.