sql >> Database >  >> RDS >> Sqlserver

SELECT CASE CAST Conversiefout

Je kunt datatypes niet mixen in CASE-expressies (of in ieder geval zonder ervoor te zorgen dat ze impliciet OK casten)

wanneer geconfronteerd met een statement zoals het volgende, zal SQL Server de prioriteit van het datatype gebruiken om te bepalen wat het algemene datatype van de expressie zou moeten zijn

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

Voor de bovenstaande datetime heeft een hogere prioriteit dan char dus het cast de string impliciet naar een datum die mislukt.

Het volgende lukt echter als sql_variant heeft een hogere prioriteit

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

Dus je kunt op die manier meerdere gemengde datatypes retourneren (ik weet niet zeker hoe gemakkelijk sql_variant is om mee te werken)

Anders zou je NULL kunnen retourneren voor ongeldige datetimes in plaats van de onzingegevens terug te sturen of alles naar een string te casten als je het moet retourneren.




  1. wat is de betekenis van selecteren ''-''

  2. voeg meerdere gegevens toe aan een xml-bestand met behulp van PHP xmlwriter

  3. Vind en vervang de volledige mysql-database

  4. Vind de dichtstbijzijnde 10 steden met MySQL met behulp van breedte- en lengtegraad?