Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Erreur de conversion SELECT CASE CAST

Vous ne pouvez pas mélanger les types de données dans les expressions CASE (ou du moins sans prendre soin qu'ils transtyperont implicitement OK)

lorsqu'il est confronté à une déclaration comme la suivante, SQL Server utilisera la priorité des types de données pour déterminer quel devrait être le type de données global de l'expression

SELECT CASE WHEN 1=1 THEN 'not-a-date' ELSE getdate() END

Pour le datetime ci-dessus a une priorité supérieure à char il convertit donc implicitement la chaîne en une date qui échoue.

Ce qui suit réussit cependant en tant que sql_variant a une priorité plus élevée

SELECT CASE WHEN 1=1 THEN cast('not-a-date' as sql_variant) ELSE getdate() END

Ainsi, vous pouvez renvoyer plusieurs types de données mixtes de cette façon (je ne sais pas à quel point sql_variant est facile est de travailler avec cependant)

Autre que cela, vous pouvez retourner NULL pour les dates/heures invalides au lieu de renvoyer les données absurdes ou de tout convertir en une chaîne si vous devez la renvoyer.