sql >> Database teknologi >  >> RDS >> Sqlserver

SELECT CASE CAST Konverteringsfejl

Du kan ikke blande datatyper i CASE-udtryk (eller i det mindste uden at passe på, at de implicit vil kaste OK)

Når de konfronteres med et sætningselement som det følgende, vil SQL Server bruge datatypeprioritet til at bestemme, hvad den overordnede datatype for udtrykket skal være

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

For ovenstående datetime har højere forrang end char så den caster implicit strengen til en dato, der mislykkes.

Det følgende lykkes dog som sql_variant har en højere prioritet

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

Så du kan returnere flere blandede datatyper på den måde (jeg er ikke sikker på, hvor let sql_variant er dog at arbejde med)

Andet end det kan du returnere NULL for ugyldige dato og klokkeslæt i stedet for at returnere nonsensdata eller cast alt til en streng, hvis du skal returnere det.




  1. Hvordan forbinder og henter jeg data fra Google Cloud SQL ved hjælp af PHP?

  2. udtræk tal fra en *varchar* celle og lav matematik med dem i ren mysql

  3. Gruppe tætte numre

  4. PHP - Postgresql Hvordan kan jeg rulle en forespørgsel tilbage, hvis den returnerer fejl?