sql >> Base de Datos >  >> RDS >> Sqlserver

Error de conversión de SELECT CASE CAST

No puede mezclar tipos de datos en expresiones CASE (o al menos sin tener cuidado de que implícitamente emitan OK)

cuando se enfrenta a una declaración como la siguiente, SQL Server utilizará la precedencia del tipo de datos para determinar cuál debe ser el tipo de datos general de la expresión

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

Para el datetime anterior tiene mayor precedencia que char por lo que implícitamente convierte la cadena en una fecha que falla.

Sin embargo, lo siguiente tiene éxito como sql_variant tiene mayor precedencia

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

Entonces puede devolver múltiples tipos de datos mixtos de esa manera (no estoy seguro de cuán fácil sql_variant es para trabajar sin embargo)

Aparte de eso, podría devolver NULL para fechas y horas no válidas en lugar de devolver los datos sin sentido o convertir todo en una cadena si debe devolverlo.