sql >> Databasteknik >  >> RDS >> Sqlserver

SELECT CASE CAST Konverteringsfel

Du kan inte blanda datatyper i CASE-uttryck (eller åtminstone utan att se till att de implicit cast OK)

när den konfronteras med ett uttryck som följande kommer SQL Server att använda datatypprioritet för att bestämma vad den övergripande datatypen för uttrycket ska vara

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

För ovanstående datetime har högre prioritet än char så den kastar implicit strängen till ett datum som misslyckas.

Följande lyckas dock som sql_variant har högre prioritet

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

Så du kan returnera flera blandade datatyper på det sättet (jag är inte säker på hur lätt sql_variant är att arbeta med dock)

Annat än det kan du returnera NULL för ogiltiga datum och tider istället för att returnera nonsensdata eller casta allt till en sträng om du måste returnera den.




  1. PDO “Ofångat undantag 'PDOException' .. Kan inte köra frågor medan andra obuffrade frågor är aktiva. Överväg att använda PDOStatement::fetchAll()."

  2. Varför fungerar inte yttre ordning efter korrekt?

  3. Kardinalitetsbrott vid användning av en underfråga som returnerar två värden

  4. Entity Framework &Oracle:Kan inte infoga VARCHAR2> 1 999 tecken