Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Erro de conversão SELECT CASE CAST


Você não pode misturar tipos de dados em expressões CASE (ou pelo menos sem tomar cuidado para que eles sejam convertidos implicitamente em OK)

quando confrontado com uma instrução como a seguinte, o SQL Server usará a precedência de tipo de dados para determinar qual deve ser o tipo de dados geral da expressão
SELECT CASE WHEN 1=1 THEN 'not-a-date' ELSE getdate() END

Para o datetime acima tem precedência maior que char então ele converte implicitamente a string para uma data que falha.

O seguinte é bem-sucedido, no entanto, como sql_variant tem uma precedência mais alta
SELECT CASE WHEN 1=1 THEN cast('not-a-date' as sql_variant) ELSE getdate() END

Assim, você pode retornar vários tipos de dados mistos dessa maneira (não tenho certeza de quão fácil sql_variant é para trabalhar embora)

Fora isso, você pode retornar NULL para datas inválidas em vez de retornar os dados sem sentido ou converter tudo em uma string se você precisar devolvê-lo.